1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module harfbuzz.c.types;
26 
27 public import gobject.c.types;
28 
29 public alias hb_language_t = void*;
30 
31 /**
32  * Data type for booleans.
33  */
34 public alias int hb_bool_t;
35 
36 /**
37  * Data type for holding Unicode codepoints. Also
38  * used to hold glyph IDs.
39  */
40 public alias uint hb_codepoint_t;
41 
42 /**
43  * Data type for holding color values. Colors are eight bits per
44  * channel RGB plus alpha transparency.
45  */
46 public alias uint hb_color_t;
47 
48 /**
49  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
50  *
51  * This method should retrieve the extents for a font, for horizontal-direction
52  * text segments. Extents must be returned in an #hb_glyph_extents output
53  * parameter.
54  */
55 public alias hb_font_get_font_extents_func_t hb_font_get_font_h_extents_func_t;
56 
57 /**
58  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
59  *
60  * This method should retrieve the extents for a font, for vertical-direction
61  * text segments. Extents must be returned in an #hb_glyph_extents output
62  * parameter.
63  */
64 public alias hb_font_get_font_extents_func_t hb_font_get_font_v_extents_func_t;
65 
66 /**
67  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
68  *
69  * This method should retrieve the advance for a specified glyph, in
70  * horizontal-direction text segments. Advances must be returned in
71  * an #hb_position_t output parameter.
72  */
73 public alias hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;
74 
75 /**
76  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
77  *
78  * This method should retrieve the advances for a sequence of glyphs, in
79  * horizontal-direction text segments.
80  */
81 public alias hb_font_get_glyph_advances_func_t hb_font_get_glyph_h_advances_func_t;
82 
83 /**
84  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
85  *
86  * This method should retrieve the kerning-adjustment value for a glyph-pair in
87  * the specified font, for horizontal text segments.
88  */
89 public alias hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;
90 
91 /**
92  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
93  *
94  * This method should retrieve the (X,Y) coordinates (in font units) of the
95  * origin for a glyph, for horizontal-direction text segments. Each
96  * coordinate must be returned in an #hb_position_t output parameter.
97  */
98 public alias hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;
99 
100 /**
101  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
102  *
103  * This method should retrieve the advance for a specified glyph, in
104  * vertical-direction text segments. Advances must be returned in
105  * an #hb_position_t output parameter.
106  */
107 public alias hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;
108 
109 /**
110  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
111  *
112  * This method should retrieve the advances for a sequence of glyphs, in
113  * vertical-direction text segments.
114  */
115 public alias hb_font_get_glyph_advances_func_t hb_font_get_glyph_v_advances_func_t;
116 
117 /**
118  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
119  *
120  * This method should retrieve the kerning-adjustment value for a glyph-pair in
121  * the specified font, for vertical text segments.
122  */
123 public alias hb_font_get_glyph_kerning_func_t hb_font_get_glyph_v_kerning_func_t;
124 
125 /**
126  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
127  *
128  * This method should retrieve the (X,Y) coordinates (in font units) of the
129  * origin for a glyph, for vertical-direction text segments. Each coordinate
130  * must be returned in an #hb_position_t output parameter.
131  */
132 public alias hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;
133 
134 /**
135  * Data type for bitmasks.
136  */
137 public alias uint hb_mask_t;
138 
139 /**
140  * An integral type representing an OpenType 'name' table name identifier.
141  * There are predefined name IDs, as well as name IDs return from other
142  * API.  These can be used to fetch name strings from a font face.
143  *
144  * For more information on these fields, see the
145  * [OpenType spec](https://docs.microsoft.com/en-us/typography/opentype/spec/name#name-ids).
146  */
147 public alias uint hb_ot_name_id_t;
148 
149 /**
150  * Data type for holding a single coordinate value.
151  * Contour points and other multi-dimensional data are
152  * stored as tuples of #hb_position_t's.
153  */
154 public alias int hb_position_t;
155 
156 /**
157  * Data type for tag identifiers. Tags are four
158  * byte integers, each byte representing a character.
159  *
160  * Tags are used to identify tables, design-variation axes,
161  * scripts, languages, font features, and baselines with
162  * human-readable names.
163  */
164 public alias uint hb_tag_t;
165 
166 /**
167  * The selectors defined for specifying AAT feature settings.
168  *
169  * Since: 2.2.0
170  */
171 public enum hb_aat_layout_feature_selector_t
172 {
173 	/**
174 	 * Initial, unset feature selector
175 	 */
176 	INVALID = 65535,
177 	/**
178 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC
179 	 */
180 	ALL_TYPE_FEATURES_ON = 0,
181 	/**
182 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC
183 	 */
184 	ALL_TYPE_FEATURES_OFF = 1,
185 	/**
186 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
187 	 */
188 	REQUIRED_LIGATURES_ON = 0,
189 	/**
190 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
191 	 */
192 	REQUIRED_LIGATURES_OFF = 1,
193 	/**
194 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
195 	 */
196 	COMMON_LIGATURES_ON = 2,
197 	/**
198 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
199 	 */
200 	COMMON_LIGATURES_OFF = 3,
201 	/**
202 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
203 	 */
204 	RARE_LIGATURES_ON = 4,
205 	/**
206 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
207 	 */
208 	RARE_LIGATURES_OFF = 5,
209 	/**
210 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
211 	 */
212 	LOGOS_ON = 6,
213 	/**
214 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
215 	 */
216 	LOGOS_OFF = 7,
217 	/**
218 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
219 	 */
220 	REBUS_PICTURES_ON = 8,
221 	/**
222 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
223 	 */
224 	REBUS_PICTURES_OFF = 9,
225 	/**
226 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
227 	 */
228 	DIPHTHONG_LIGATURES_ON = 10,
229 	/**
230 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
231 	 */
232 	DIPHTHONG_LIGATURES_OFF = 11,
233 	/**
234 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
235 	 */
236 	SQUARED_LIGATURES_ON = 12,
237 	/**
238 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
239 	 */
240 	SQUARED_LIGATURES_OFF = 13,
241 	/**
242 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
243 	 */
244 	ABBREV_SQUARED_LIGATURES_ON = 14,
245 	/**
246 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
247 	 */
248 	ABBREV_SQUARED_LIGATURES_OFF = 15,
249 	/**
250 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
251 	 */
252 	SYMBOL_LIGATURES_ON = 16,
253 	/**
254 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
255 	 */
256 	SYMBOL_LIGATURES_OFF = 17,
257 	/**
258 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
259 	 */
260 	CONTEXTUAL_LIGATURES_ON = 18,
261 	/**
262 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
263 	 */
264 	CONTEXTUAL_LIGATURES_OFF = 19,
265 	/**
266 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
267 	 */
268 	HISTORICAL_LIGATURES_ON = 20,
269 	/**
270 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
271 	 */
272 	HISTORICAL_LIGATURES_OFF = 21,
273 	/**
274 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
275 	 */
276 	UNCONNECTED = 0,
277 	/**
278 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
279 	 */
280 	PARTIALLY_CONNECTED = 1,
281 	/**
282 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
283 	 */
284 	CURSIVE = 2,
285 	/**
286 	 * Deprecated
287 	 */
288 	UPPER_AND_LOWER_CASE = 0,
289 	/**
290 	 * Deprecated
291 	 */
292 	ALL_CAPS = 1,
293 	/**
294 	 * Deprecated
295 	 */
296 	ALL_LOWER_CASE = 2,
297 	/**
298 	 * Deprecated
299 	 */
300 	SMALL_CAPS = 3,
301 	/**
302 	 * Deprecated
303 	 */
304 	INITIAL_CAPS = 4,
305 	/**
306 	 * Deprecated
307 	 */
308 	INITIAL_CAPS_AND_SMALL_CAPS = 5,
309 	/**
310 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION
311 	 */
312 	SUBSTITUTE_VERTICAL_FORMS_ON = 0,
313 	/**
314 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION
315 	 */
316 	SUBSTITUTE_VERTICAL_FORMS_OFF = 1,
317 	/**
318 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT
319 	 */
320 	LINGUISTIC_REARRANGEMENT_ON = 0,
321 	/**
322 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT
323 	 */
324 	LINGUISTIC_REARRANGEMENT_OFF = 1,
325 	/**
326 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING
327 	 */
328 	MONOSPACED_NUMBERS = 0,
329 	/**
330 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING
331 	 */
332 	PROPORTIONAL_NUMBERS = 1,
333 	/**
334 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING
335 	 */
336 	THIRD_WIDTH_NUMBERS = 2,
337 	/**
338 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING
339 	 */
340 	QUARTER_WIDTH_NUMBERS = 3,
341 	/**
342 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
343 	 */
344 	WORD_INITIAL_SWASHES_ON = 0,
345 	/**
346 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
347 	 */
348 	WORD_INITIAL_SWASHES_OFF = 1,
349 	/**
350 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
351 	 */
352 	WORD_FINAL_SWASHES_ON = 2,
353 	/**
354 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
355 	 */
356 	WORD_FINAL_SWASHES_OFF = 3,
357 	/**
358 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
359 	 */
360 	LINE_INITIAL_SWASHES_ON = 4,
361 	/**
362 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
363 	 */
364 	LINE_INITIAL_SWASHES_OFF = 5,
365 	/**
366 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
367 	 */
368 	LINE_FINAL_SWASHES_ON = 6,
369 	/**
370 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
371 	 */
372 	LINE_FINAL_SWASHES_OFF = 7,
373 	/**
374 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
375 	 */
376 	NON_FINAL_SWASHES_ON = 8,
377 	/**
378 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
379 	 */
380 	NON_FINAL_SWASHES_OFF = 9,
381 	/**
382 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE
383 	 */
384 	SHOW_DIACRITICS = 0,
385 	/**
386 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE
387 	 */
388 	HIDE_DIACRITICS = 1,
389 	/**
390 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE
391 	 */
392 	DECOMPOSE_DIACRITICS = 2,
393 	/**
394 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION
395 	 */
396 	NORMAL_POSITION = 0,
397 	/**
398 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION
399 	 */
400 	SUPERIORS = 1,
401 	/**
402 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION
403 	 */
404 	INFERIORS = 2,
405 	/**
406 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION
407 	 */
408 	ORDINALS = 3,
409 	/**
410 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION
411 	 */
412 	SCIENTIFIC_INFERIORS = 4,
413 	/**
414 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS
415 	 */
416 	NO_FRACTIONS = 0,
417 	/**
418 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS
419 	 */
420 	VERTICAL_FRACTIONS = 1,
421 	/**
422 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS
423 	 */
424 	DIAGONAL_FRACTIONS = 2,
425 	/**
426 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE
427 	 */
428 	PREVENT_OVERLAP_ON = 0,
429 	/**
430 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE
431 	 */
432 	PREVENT_OVERLAP_OFF = 1,
433 	/**
434 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
435 	 */
436 	HYPHENS_TO_EM_DASH_ON = 0,
437 	/**
438 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
439 	 */
440 	HYPHENS_TO_EM_DASH_OFF = 1,
441 	/**
442 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
443 	 */
444 	HYPHEN_TO_EN_DASH_ON = 2,
445 	/**
446 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
447 	 */
448 	HYPHEN_TO_EN_DASH_OFF = 3,
449 	/**
450 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
451 	 */
452 	SLASHED_ZERO_ON = 4,
453 	/**
454 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
455 	 */
456 	SLASHED_ZERO_OFF = 5,
457 	/**
458 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
459 	 */
460 	FORM_INTERROBANG_ON = 6,
461 	/**
462 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
463 	 */
464 	FORM_INTERROBANG_OFF = 7,
465 	/**
466 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
467 	 */
468 	SMART_QUOTES_ON = 8,
469 	/**
470 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
471 	 */
472 	SMART_QUOTES_OFF = 9,
473 	/**
474 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
475 	 */
476 	PERIODS_TO_ELLIPSIS_ON = 10,
477 	/**
478 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
479 	 */
480 	PERIODS_TO_ELLIPSIS_OFF = 11,
481 	/**
482 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
483 	 */
484 	HYPHEN_TO_MINUS_ON = 0,
485 	/**
486 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
487 	 */
488 	HYPHEN_TO_MINUS_OFF = 1,
489 	/**
490 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
491 	 */
492 	ASTERISK_TO_MULTIPLY_ON = 2,
493 	/**
494 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
495 	 */
496 	ASTERISK_TO_MULTIPLY_OFF = 3,
497 	/**
498 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
499 	 */
500 	SLASH_TO_DIVIDE_ON = 4,
501 	/**
502 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
503 	 */
504 	SLASH_TO_DIVIDE_OFF = 5,
505 	/**
506 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
507 	 */
508 	INEQUALITY_LIGATURES_ON = 6,
509 	/**
510 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
511 	 */
512 	INEQUALITY_LIGATURES_OFF = 7,
513 	/**
514 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
515 	 */
516 	EXPONENTS_ON = 8,
517 	/**
518 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
519 	 */
520 	EXPONENTS_OFF = 9,
521 	/**
522 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
523 	 */
524 	MATHEMATICAL_GREEK_ON = 10,
525 	/**
526 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
527 	 */
528 	MATHEMATICAL_GREEK_OFF = 11,
529 	/**
530 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
531 	 */
532 	NO_ORNAMENTS = 0,
533 	/**
534 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
535 	 */
536 	DINGBATS = 1,
537 	/**
538 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
539 	 */
540 	PI_CHARACTERS = 2,
541 	/**
542 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
543 	 */
544 	FLEURONS = 3,
545 	/**
546 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
547 	 */
548 	DECORATIVE_BORDERS = 4,
549 	/**
550 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
551 	 */
552 	INTERNATIONAL_SYMBOLS = 5,
553 	/**
554 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
555 	 */
556 	MATH_SYMBOLS = 6,
557 	/**
558 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_ALTERNATIVES
559 	 */
560 	NO_ALTERNATES = 0,
561 	/**
562 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE
563 	 */
564 	DESIGN_LEVEL1 = 0,
565 	/**
566 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE
567 	 */
568 	DESIGN_LEVEL2 = 1,
569 	/**
570 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE
571 	 */
572 	DESIGN_LEVEL3 = 2,
573 	/**
574 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE
575 	 */
576 	DESIGN_LEVEL4 = 3,
577 	/**
578 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE
579 	 */
580 	DESIGN_LEVEL5 = 4,
581 	/**
582 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
583 	 */
584 	NO_STYLE_OPTIONS = 0,
585 	/**
586 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
587 	 */
588 	DISPLAY_TEXT = 1,
589 	/**
590 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
591 	 */
592 	ENGRAVED_TEXT = 2,
593 	/**
594 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
595 	 */
596 	ILLUMINATED_CAPS = 3,
597 	/**
598 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
599 	 */
600 	TITLING_CAPS = 4,
601 	/**
602 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
603 	 */
604 	TALL_CAPS = 5,
605 	/**
606 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
607 	 */
608 	TRADITIONAL_CHARACTERS = 0,
609 	/**
610 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
611 	 */
612 	SIMPLIFIED_CHARACTERS = 1,
613 	/**
614 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
615 	 */
616 	JIS1978_CHARACTERS = 2,
617 	/**
618 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
619 	 */
620 	JIS1983_CHARACTERS = 3,
621 	/**
622 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
623 	 */
624 	JIS1990_CHARACTERS = 4,
625 	/**
626 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
627 	 */
628 	TRADITIONAL_ALT_ONE = 5,
629 	/**
630 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
631 	 */
632 	TRADITIONAL_ALT_TWO = 6,
633 	/**
634 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
635 	 */
636 	TRADITIONAL_ALT_THREE = 7,
637 	/**
638 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
639 	 */
640 	TRADITIONAL_ALT_FOUR = 8,
641 	/**
642 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
643 	 */
644 	TRADITIONAL_ALT_FIVE = 9,
645 	/**
646 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
647 	 */
648 	EXPERT_CHARACTERS = 10,
649 	/**
650 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
651 	 */
652 	JIS2004_CHARACTERS = 11,
653 	/**
654 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
655 	 */
656 	HOJO_CHARACTERS = 12,
657 	/**
658 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
659 	 */
660 	NLCCHARACTERS = 13,
661 	/**
662 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
663 	 */
664 	TRADITIONAL_NAMES_CHARACTERS = 14,
665 	/**
666 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE
667 	 */
668 	LOWER_CASE_NUMBERS = 0,
669 	/**
670 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE
671 	 */
672 	UPPER_CASE_NUMBERS = 1,
673 	/**
674 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
675 	 */
676 	PROPORTIONAL_TEXT = 0,
677 	/**
678 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
679 	 */
680 	MONOSPACED_TEXT = 1,
681 	/**
682 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
683 	 */
684 	HALF_WIDTH_TEXT = 2,
685 	/**
686 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
687 	 */
688 	THIRD_WIDTH_TEXT = 3,
689 	/**
690 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
691 	 */
692 	QUARTER_WIDTH_TEXT = 4,
693 	/**
694 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
695 	 */
696 	ALT_PROPORTIONAL_TEXT = 5,
697 	/**
698 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
699 	 */
700 	ALT_HALF_WIDTH_TEXT = 6,
701 	/**
702 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
703 	 */
704 	NO_TRANSLITERATION = 0,
705 	/**
706 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
707 	 */
708 	HANJA_TO_HANGUL = 1,
709 	/**
710 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
711 	 */
712 	HIRAGANA_TO_KATAKANA = 2,
713 	/**
714 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
715 	 */
716 	KATAKANA_TO_HIRAGANA = 3,
717 	/**
718 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
719 	 */
720 	KANA_TO_ROMANIZATION = 4,
721 	/**
722 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
723 	 */
724 	ROMANIZATION_TO_HIRAGANA = 5,
725 	/**
726 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
727 	 */
728 	ROMANIZATION_TO_KATAKANA = 6,
729 	/**
730 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
731 	 */
732 	HANJA_TO_HANGUL_ALT_ONE = 7,
733 	/**
734 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
735 	 */
736 	HANJA_TO_HANGUL_ALT_TWO = 8,
737 	/**
738 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
739 	 */
740 	HANJA_TO_HANGUL_ALT_THREE = 9,
741 	/**
742 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
743 	 */
744 	NO_ANNOTATION = 0,
745 	/**
746 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
747 	 */
748 	BOX_ANNOTATION = 1,
749 	/**
750 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
751 	 */
752 	ROUNDED_BOX_ANNOTATION = 2,
753 	/**
754 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
755 	 */
756 	CIRCLE_ANNOTATION = 3,
757 	/**
758 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
759 	 */
760 	INVERTED_CIRCLE_ANNOTATION = 4,
761 	/**
762 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
763 	 */
764 	PARENTHESIS_ANNOTATION = 5,
765 	/**
766 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
767 	 */
768 	PERIOD_ANNOTATION = 6,
769 	/**
770 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
771 	 */
772 	ROMAN_NUMERAL_ANNOTATION = 7,
773 	/**
774 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
775 	 */
776 	DIAMOND_ANNOTATION = 8,
777 	/**
778 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
779 	 */
780 	INVERTED_BOX_ANNOTATION = 9,
781 	/**
782 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
783 	 */
784 	INVERTED_ROUNDED_BOX_ANNOTATION = 10,
785 	/**
786 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_KANA_SPACING_TYPE
787 	 */
788 	FULL_WIDTH_KANA = 0,
789 	/**
790 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_KANA_SPACING_TYPE
791 	 */
792 	PROPORTIONAL_KANA = 1,
793 	/**
794 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE
795 	 */
796 	FULL_WIDTH_IDEOGRAPHS = 0,
797 	/**
798 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE
799 	 */
800 	PROPORTIONAL_IDEOGRAPHS = 1,
801 	/**
802 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE
803 	 */
804 	HALF_WIDTH_IDEOGRAPHS = 2,
805 	/**
806 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
807 	 */
808 	CANONICAL_COMPOSITION_ON = 0,
809 	/**
810 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
811 	 */
812 	CANONICAL_COMPOSITION_OFF = 1,
813 	/**
814 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
815 	 */
816 	COMPATIBILITY_COMPOSITION_ON = 2,
817 	/**
818 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
819 	 */
820 	COMPATIBILITY_COMPOSITION_OFF = 3,
821 	/**
822 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
823 	 */
824 	TRANSCODING_COMPOSITION_ON = 4,
825 	/**
826 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
827 	 */
828 	TRANSCODING_COMPOSITION_OFF = 5,
829 	/**
830 	 * Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_OFF instead
831 	 */
832 	NO_RUBY_KANA = 0,
833 	/**
834 	 * Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_ON instead
835 	 */
836 	RUBY_KANA = 1,
837 	/**
838 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA
839 	 */
840 	RUBY_KANA_ON = 2,
841 	/**
842 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA
843 	 */
844 	RUBY_KANA_OFF = 3,
845 	/**
846 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
847 	 */
848 	NO_CJK_SYMBOL_ALTERNATIVES = 0,
849 	/**
850 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
851 	 */
852 	CJK_SYMBOL_ALT_ONE = 1,
853 	/**
854 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
855 	 */
856 	CJK_SYMBOL_ALT_TWO = 2,
857 	/**
858 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
859 	 */
860 	CJK_SYMBOL_ALT_THREE = 3,
861 	/**
862 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
863 	 */
864 	CJK_SYMBOL_ALT_FOUR = 4,
865 	/**
866 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
867 	 */
868 	CJK_SYMBOL_ALT_FIVE = 5,
869 	/**
870 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
871 	 */
872 	NO_IDEOGRAPHIC_ALTERNATIVES = 0,
873 	/**
874 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
875 	 */
876 	IDEOGRAPHIC_ALT_ONE = 1,
877 	/**
878 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
879 	 */
880 	IDEOGRAPHIC_ALT_TWO = 2,
881 	/**
882 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
883 	 */
884 	IDEOGRAPHIC_ALT_THREE = 3,
885 	/**
886 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
887 	 */
888 	IDEOGRAPHIC_ALT_FOUR = 4,
889 	/**
890 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
891 	 */
892 	IDEOGRAPHIC_ALT_FIVE = 5,
893 	/**
894 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE
895 	 */
896 	CJK_VERTICAL_ROMAN_CENTERED = 0,
897 	/**
898 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE
899 	 */
900 	CJK_VERTICAL_ROMAN_HBASELINE = 1,
901 	/**
902 	 * Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_OFF instead
903 	 */
904 	NO_CJK_ITALIC_ROMAN = 0,
905 	/**
906 	 * Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_ON instead
907 	 */
908 	CJK_ITALIC_ROMAN = 1,
909 	/**
910 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN
911 	 */
912 	CJK_ITALIC_ROMAN_ON = 2,
913 	/**
914 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN
915 	 */
916 	CJK_ITALIC_ROMAN_OFF = 3,
917 	/**
918 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT
919 	 */
920 	CASE_SENSITIVE_LAYOUT_ON = 0,
921 	/**
922 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT
923 	 */
924 	CASE_SENSITIVE_LAYOUT_OFF = 1,
925 	/**
926 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT
927 	 */
928 	CASE_SENSITIVE_SPACING_ON = 2,
929 	/**
930 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT
931 	 */
932 	CASE_SENSITIVE_SPACING_OFF = 3,
933 	/**
934 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA
935 	 */
936 	ALTERNATE_HORIZ_KANA_ON = 0,
937 	/**
938 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA
939 	 */
940 	ALTERNATE_HORIZ_KANA_OFF = 1,
941 	/**
942 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA
943 	 */
944 	ALTERNATE_VERT_KANA_ON = 2,
945 	/**
946 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA
947 	 */
948 	ALTERNATE_VERT_KANA_OFF = 3,
949 	/**
950 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
951 	 */
952 	NO_STYLISTIC_ALTERNATES = 0,
953 	/**
954 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
955 	 */
956 	STYLISTIC_ALT_ONE_ON = 2,
957 	/**
958 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
959 	 */
960 	STYLISTIC_ALT_ONE_OFF = 3,
961 	/**
962 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
963 	 */
964 	STYLISTIC_ALT_TWO_ON = 4,
965 	/**
966 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
967 	 */
968 	STYLISTIC_ALT_TWO_OFF = 5,
969 	/**
970 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
971 	 */
972 	STYLISTIC_ALT_THREE_ON = 6,
973 	/**
974 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
975 	 */
976 	STYLISTIC_ALT_THREE_OFF = 7,
977 	/**
978 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
979 	 */
980 	STYLISTIC_ALT_FOUR_ON = 8,
981 	/**
982 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
983 	 */
984 	STYLISTIC_ALT_FOUR_OFF = 9,
985 	/**
986 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
987 	 */
988 	STYLISTIC_ALT_FIVE_ON = 10,
989 	/**
990 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
991 	 */
992 	STYLISTIC_ALT_FIVE_OFF = 11,
993 	/**
994 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
995 	 */
996 	STYLISTIC_ALT_SIX_ON = 12,
997 	/**
998 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
999 	 */
1000 	STYLISTIC_ALT_SIX_OFF = 13,
1001 	/**
1002 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1003 	 */
1004 	STYLISTIC_ALT_SEVEN_ON = 14,
1005 	/**
1006 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1007 	 */
1008 	STYLISTIC_ALT_SEVEN_OFF = 15,
1009 	/**
1010 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1011 	 */
1012 	STYLISTIC_ALT_EIGHT_ON = 16,
1013 	/**
1014 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1015 	 */
1016 	STYLISTIC_ALT_EIGHT_OFF = 17,
1017 	/**
1018 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1019 	 */
1020 	STYLISTIC_ALT_NINE_ON = 18,
1021 	/**
1022 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1023 	 */
1024 	STYLISTIC_ALT_NINE_OFF = 19,
1025 	/**
1026 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1027 	 */
1028 	STYLISTIC_ALT_TEN_ON = 20,
1029 	/**
1030 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1031 	 */
1032 	STYLISTIC_ALT_TEN_OFF = 21,
1033 	/**
1034 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1035 	 */
1036 	STYLISTIC_ALT_ELEVEN_ON = 22,
1037 	/**
1038 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1039 	 */
1040 	STYLISTIC_ALT_ELEVEN_OFF = 23,
1041 	/**
1042 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1043 	 */
1044 	STYLISTIC_ALT_TWELVE_ON = 24,
1045 	/**
1046 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1047 	 */
1048 	STYLISTIC_ALT_TWELVE_OFF = 25,
1049 	/**
1050 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1051 	 */
1052 	STYLISTIC_ALT_THIRTEEN_ON = 26,
1053 	/**
1054 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1055 	 */
1056 	STYLISTIC_ALT_THIRTEEN_OFF = 27,
1057 	/**
1058 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1059 	 */
1060 	STYLISTIC_ALT_FOURTEEN_ON = 28,
1061 	/**
1062 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1063 	 */
1064 	STYLISTIC_ALT_FOURTEEN_OFF = 29,
1065 	/**
1066 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1067 	 */
1068 	STYLISTIC_ALT_FIFTEEN_ON = 30,
1069 	/**
1070 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1071 	 */
1072 	STYLISTIC_ALT_FIFTEEN_OFF = 31,
1073 	/**
1074 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1075 	 */
1076 	STYLISTIC_ALT_SIXTEEN_ON = 32,
1077 	/**
1078 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1079 	 */
1080 	STYLISTIC_ALT_SIXTEEN_OFF = 33,
1081 	/**
1082 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1083 	 */
1084 	STYLISTIC_ALT_SEVENTEEN_ON = 34,
1085 	/**
1086 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1087 	 */
1088 	STYLISTIC_ALT_SEVENTEEN_OFF = 35,
1089 	/**
1090 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1091 	 */
1092 	STYLISTIC_ALT_EIGHTEEN_ON = 36,
1093 	/**
1094 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1095 	 */
1096 	STYLISTIC_ALT_EIGHTEEN_OFF = 37,
1097 	/**
1098 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1099 	 */
1100 	STYLISTIC_ALT_NINETEEN_ON = 38,
1101 	/**
1102 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1103 	 */
1104 	STYLISTIC_ALT_NINETEEN_OFF = 39,
1105 	/**
1106 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1107 	 */
1108 	STYLISTIC_ALT_TWENTY_ON = 40,
1109 	/**
1110 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1111 	 */
1112 	STYLISTIC_ALT_TWENTY_OFF = 41,
1113 	/**
1114 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1115 	 */
1116 	CONTEXTUAL_ALTERNATES_ON = 0,
1117 	/**
1118 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1119 	 */
1120 	CONTEXTUAL_ALTERNATES_OFF = 1,
1121 	/**
1122 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1123 	 */
1124 	SWASH_ALTERNATES_ON = 2,
1125 	/**
1126 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1127 	 */
1128 	SWASH_ALTERNATES_OFF = 3,
1129 	/**
1130 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1131 	 */
1132 	CONTEXTUAL_SWASH_ALTERNATES_ON = 4,
1133 	/**
1134 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1135 	 */
1136 	CONTEXTUAL_SWASH_ALTERNATES_OFF = 5,
1137 	/**
1138 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE
1139 	 */
1140 	DEFAULT_LOWER_CASE = 0,
1141 	/**
1142 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE
1143 	 */
1144 	LOWER_CASE_SMALL_CAPS = 1,
1145 	/**
1146 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE
1147 	 */
1148 	LOWER_CASE_PETITE_CAPS = 2,
1149 	/**
1150 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE
1151 	 */
1152 	DEFAULT_UPPER_CASE = 0,
1153 	/**
1154 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE
1155 	 */
1156 	UPPER_CASE_SMALL_CAPS = 1,
1157 	/**
1158 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE
1159 	 */
1160 	UPPER_CASE_PETITE_CAPS = 2,
1161 	/**
1162 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE
1163 	 */
1164 	HALF_WIDTH_CJK_ROMAN = 0,
1165 	/**
1166 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE
1167 	 */
1168 	PROPORTIONAL_CJK_ROMAN = 1,
1169 	/**
1170 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE
1171 	 */
1172 	DEFAULT_CJK_ROMAN = 2,
1173 	/**
1174 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE
1175 	 */
1176 	FULL_WIDTH_CJK_ROMAN = 3,
1177 }
1178 alias hb_aat_layout_feature_selector_t aat_layout_feature_selector_t;
1179 
1180 /**
1181  * The possible feature types defined for AAT shaping, from Apple [Font Feature Registry](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html).
1182  *
1183  * Since: 2.2.0
1184  */
1185 public enum hb_aat_layout_feature_type_t
1186 {
1187 	/**
1188 	 * Initial, unset feature type
1189 	 */
1190 	INVALID = 65535,
1191 	/**
1192 	 * [All Typographic Features](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type0)
1193 	 */
1194 	ALL_TYPOGRAPHIC = 0,
1195 	/**
1196 	 * [Ligatures](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type1)
1197 	 */
1198 	LIGATURES = 1,
1199 	/**
1200 	 * [Cursive Connection](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type2)
1201 	 */
1202 	CURISVE_CONNECTION = 2,
1203 	/**
1204 	 * [Letter Case](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type3)
1205 	 */
1206 	LETTER_CASE = 3,
1207 	/**
1208 	 * [Vertical Substitution](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type4)
1209 	 */
1210 	VERTICAL_SUBSTITUTION = 4,
1211 	/**
1212 	 * [Linguistic Rearrangement](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type5)
1213 	 */
1214 	LINGUISTIC_REARRANGEMENT = 5,
1215 	/**
1216 	 * [Number Spacing](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type6)
1217 	 */
1218 	NUMBER_SPACING = 6,
1219 	/**
1220 	 * [Smart Swash](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type8)
1221 	 */
1222 	SMART_SWASH_TYPE = 8,
1223 	/**
1224 	 * [Diacritics](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type9)
1225 	 */
1226 	DIACRITICS_TYPE = 9,
1227 	/**
1228 	 * [Vertical Position](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type10)
1229 	 */
1230 	VERTICAL_POSITION = 10,
1231 	/**
1232 	 * [Fractions](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type11)
1233 	 */
1234 	FRACTIONS = 11,
1235 	/**
1236 	 * [Overlapping Characters](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type13)
1237 	 */
1238 	OVERLAPPING_CHARACTERS_TYPE = 13,
1239 	/**
1240 	 * [Typographic Extras](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type14)
1241 	 */
1242 	TYPOGRAPHIC_EXTRAS = 14,
1243 	/**
1244 	 * [Mathematical Extras](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type15)
1245 	 */
1246 	MATHEMATICAL_EXTRAS = 15,
1247 	/**
1248 	 * [Ornament Sets](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type16)
1249 	 */
1250 	ORNAMENT_SETS_TYPE = 16,
1251 	/**
1252 	 * [Character Alternatives](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type17)
1253 	 */
1254 	CHARACTER_ALTERNATIVES = 17,
1255 	/**
1256 	 * [Design Complexity](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type18)
1257 	 */
1258 	DESIGN_COMPLEXITY_TYPE = 18,
1259 	/**
1260 	 * [Style Options](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type19)
1261 	 */
1262 	STYLE_OPTIONS = 19,
1263 	/**
1264 	 * [Character Shape](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type20)
1265 	 */
1266 	CHARACTER_SHAPE = 20,
1267 	/**
1268 	 * [Number Case](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type21)
1269 	 */
1270 	NUMBER_CASE = 21,
1271 	/**
1272 	 * [Text Spacing](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type22)
1273 	 */
1274 	TEXT_SPACING = 22,
1275 	/**
1276 	 * [Transliteration](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type23)
1277 	 */
1278 	TRANSLITERATION = 23,
1279 	/**
1280 	 * [Annotation](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type24)
1281 	 */
1282 	ANNOTATION_TYPE = 24,
1283 	/**
1284 	 * [Kana Spacing](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type25)
1285 	 */
1286 	KANA_SPACING_TYPE = 25,
1287 	/**
1288 	 * [Ideographic Spacing](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type26)
1289 	 */
1290 	IDEOGRAPHIC_SPACING_TYPE = 26,
1291 	/**
1292 	 * [Unicode Decomposition](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type27)
1293 	 */
1294 	UNICODE_DECOMPOSITION_TYPE = 27,
1295 	/**
1296 	 * [Ruby Kana](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type28)
1297 	 */
1298 	RUBY_KANA = 28,
1299 	/**
1300 	 * [CJK Symbol Alternatives](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type29)
1301 	 */
1302 	CJK_SYMBOL_ALTERNATIVES_TYPE = 29,
1303 	/**
1304 	 * [Ideographic Alternatives](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type30)
1305 	 */
1306 	IDEOGRAPHIC_ALTERNATIVES_TYPE = 30,
1307 	/**
1308 	 * [CJK Vertical Roman Placement](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type31)
1309 	 */
1310 	CJK_VERTICAL_ROMAN_PLACEMENT_TYPE = 31,
1311 	/**
1312 	 * [Italic CJK Roman](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type32)
1313 	 */
1314 	ITALIC_CJK_ROMAN = 32,
1315 	/**
1316 	 * [Case Sensitive Layout](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type33)
1317 	 */
1318 	CASE_SENSITIVE_LAYOUT = 33,
1319 	/**
1320 	 * [Alternate Kana](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type34)
1321 	 */
1322 	ALTERNATE_KANA = 34,
1323 	/**
1324 	 * [Stylistic Alternatives](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type35)
1325 	 */
1326 	STYLISTIC_ALTERNATIVES = 35,
1327 	/**
1328 	 * [Contextual Alternatives](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type36)
1329 	 */
1330 	CONTEXTUAL_ALTERNATIVES = 36,
1331 	/**
1332 	 * [Lower Case](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type37)
1333 	 */
1334 	LOWER_CASE = 37,
1335 	/**
1336 	 * [Upper Case](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type38)
1337 	 */
1338 	UPPER_CASE = 38,
1339 	/**
1340 	 * [Language Tag](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type39)
1341 	 */
1342 	LANGUAGE_TAG_TYPE = 39,
1343 	/**
1344 	 * [CJK Roman Spacing](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type103)
1345 	 */
1346 	CJK_ROMAN_SPACING_TYPE = 103,
1347 }
1348 alias hb_aat_layout_feature_type_t aat_layout_feature_type_t;
1349 
1350 /**
1351  * Data type for holding HarfBuzz's clustering behavior options. The cluster level
1352  * dictates one aspect of how HarfBuzz will treat non-base characters
1353  * during shaping.
1354  *
1355  * In @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES, non-base
1356  * characters are merged into the cluster of the base character that precedes them.
1357  *
1358  * In @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS, non-base characters are initially
1359  * assigned their own cluster values, which are not merged into preceding base
1360  * clusters. This allows HarfBuzz to perform additional operations like reorder
1361  * sequences of adjacent marks.
1362  *
1363  * @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES is the default, because it maintains
1364  * backward compatibility with older versions of HarfBuzz. New client programs that
1365  * do not need to maintain such backward compatibility are recommended to use
1366  * @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS instead of the default.
1367  *
1368  * Since: 0.9.42
1369  */
1370 public enum hb_buffer_cluster_level_t
1371 {
1372 	/**
1373 	 * Return cluster values grouped by graphemes into
1374 	 * monotone order.
1375 	 */
1376 	MONOTONE_GRAPHEMES = 0,
1377 	/**
1378 	 * Return cluster values grouped into monotone order.
1379 	 */
1380 	MONOTONE_CHARACTERS = 1,
1381 	/**
1382 	 * Don't group cluster values.
1383 	 */
1384 	CHARACTERS = 2,
1385 	/**
1386 	 * Default cluster level,
1387 	 * equal to @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES.
1388 	 */
1389 	DEFAULT = 0,
1390 }
1391 alias hb_buffer_cluster_level_t buffer_cluster_level_t;
1392 
1393 /**
1394  * The type of #hb_buffer_t contents.
1395  */
1396 public enum hb_buffer_content_type_t
1397 {
1398 	/**
1399 	 * Initial value for new buffer.
1400 	 */
1401 	INVALID = 0,
1402 	/**
1403 	 * The buffer contains input characters (before shaping).
1404 	 */
1405 	UNICODE = 1,
1406 	/**
1407 	 * The buffer contains output glyphs (after shaping).
1408 	 */
1409 	GLYPHS = 2,
1410 }
1411 alias hb_buffer_content_type_t buffer_content_type_t;
1412 
1413 /**
1414  * Flags from comparing two #hb_buffer_t's.
1415  *
1416  * Buffer with different #hb_buffer_content_type_t cannot be meaningfully
1417  * compared in any further detail.
1418  *
1419  * For buffers with differing length, the per-glyph comparison is not
1420  * attempted, though we do still scan reference buffer for dotted circle and
1421  * `.notdef` glyphs.
1422  *
1423  * If the buffers have the same length, we compare them glyph-by-glyph and
1424  * report which aspect(s) of the glyph info/position are different.
1425  *
1426  * Since: 1.5.0
1427  */
1428 public enum hb_buffer_diff_flags_t
1429 {
1430 	/**
1431 	 * equal buffers.
1432 	 */
1433 	EQUAL = 0,
1434 	/**
1435 	 * buffers with different
1436 	 * #hb_buffer_content_type_t.
1437 	 */
1438 	CONTENT_TYPE_MISMATCH = 1,
1439 	/**
1440 	 * buffers with differing length.
1441 	 */
1442 	LENGTH_MISMATCH = 2,
1443 	/**
1444 	 * `.notdef` glyph is present in the
1445 	 * reference buffer.
1446 	 */
1447 	NOTDEF_PRESENT = 4,
1448 	/**
1449 	 * dotted circle glyph is present
1450 	 * in the reference buffer.
1451 	 */
1452 	DOTTED_CIRCLE_PRESENT = 8,
1453 	/**
1454 	 * difference in #hb_glyph_info_t.codepoint
1455 	 */
1456 	CODEPOINT_MISMATCH = 16,
1457 	/**
1458 	 * difference in #hb_glyph_info_t.cluster
1459 	 */
1460 	CLUSTER_MISMATCH = 32,
1461 	/**
1462 	 * difference in #hb_glyph_flags_t.
1463 	 */
1464 	GLYPH_FLAGS_MISMATCH = 64,
1465 	/**
1466 	 * difference in #hb_glyph_position_t.
1467 	 */
1468 	POSITION_MISMATCH = 128,
1469 }
1470 alias hb_buffer_diff_flags_t buffer_diff_flags_t;
1471 
1472 /**
1473  * Flags for #hb_buffer_t.
1474  *
1475  * Since: 0.9.20
1476  */
1477 public enum hb_buffer_flags_t
1478 {
1479 	/**
1480 	 * the default buffer flag.
1481 	 */
1482 	DEFAULT = 0,
1483 	/**
1484 	 * flag indicating that special handling of the beginning
1485 	 * of text paragraph can be applied to this buffer. Should usually
1486 	 * be set, unless you are passing to the buffer only part
1487 	 * of the text without the full context.
1488 	 */
1489 	BOT = 1,
1490 	/**
1491 	 * flag indicating that special handling of the end of text
1492 	 * paragraph can be applied to this buffer, similar to
1493 	 * @HB_BUFFER_FLAG_BOT.
1494 	 */
1495 	EOT = 2,
1496 	/**
1497 	 * flag indication that character with Default_Ignorable
1498 	 * Unicode property should use the corresponding glyph
1499 	 * from the font, instead of hiding them (done by
1500 	 * replacing them with the space glyph and zeroing the
1501 	 * advance width.)  This flag takes precedence over
1502 	 * @HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES.
1503 	 */
1504 	PRESERVE_DEFAULT_IGNORABLES = 4,
1505 	/**
1506 	 * flag indication that character with Default_Ignorable
1507 	 * Unicode property should be removed from glyph string
1508 	 * instead of hiding them (done by replacing them with the
1509 	 * space glyph and zeroing the advance width.)
1510 	 * @HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES takes
1511 	 * precedence over this flag. Since: 1.8.0
1512 	 */
1513 	REMOVE_DEFAULT_IGNORABLES = 8,
1514 	/**
1515 	 * flag indicating that a dotted circle should
1516 	 * not be inserted in the rendering of incorrect
1517 	 * character sequences (such at <0905 093E>). Since: 2.4.0
1518 	 */
1519 	DO_NOT_INSERT_DOTTED_CIRCLE = 16,
1520 	/**
1521 	 * flag indicating that the hb_shape() call and its variants
1522 	 * should perform various verification processes on the results
1523 	 * of the shaping operation on the buffer.  If the verification
1524 	 * fails, then either a buffer message is sent, if a message
1525 	 * handler is installed on the buffer, or a message is written
1526 	 * to standard error.  In either case, the shaping result might
1527 	 * be modified to show the failed output. Since: 3.4.0
1528 	 */
1529 	VERIFY = 32,
1530 	/**
1531 	 * flag indicating that the @HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
1532 	 * glyph-flag should be produced by the shaper. By default
1533 	 * it will not be produced since it incurs a cost. Since: 4.0.0
1534 	 */
1535 	PRODUCE_UNSAFE_TO_CONCAT = 64,
1536 }
1537 alias hb_buffer_flags_t buffer_flags_t;
1538 
1539 /**
1540  * Flags that control what glyph information are serialized in hb_buffer_serialize_glyphs().
1541  *
1542  * Since: 0.9.20
1543  */
1544 public enum hb_buffer_serialize_flags_t
1545 {
1546 	/**
1547 	 * serialize glyph names, clusters and positions.
1548 	 */
1549 	DEFAULT = 0,
1550 	/**
1551 	 * do not serialize glyph cluster.
1552 	 */
1553 	NO_CLUSTERS = 1,
1554 	/**
1555 	 * do not serialize glyph position information.
1556 	 */
1557 	NO_POSITIONS = 2,
1558 	/**
1559 	 * do no serialize glyph name.
1560 	 */
1561 	NO_GLYPH_NAMES = 4,
1562 	/**
1563 	 * serialize glyph extents.
1564 	 */
1565 	GLYPH_EXTENTS = 8,
1566 	/**
1567 	 * serialize glyph flags. Since: 1.5.0
1568 	 */
1569 	GLYPH_FLAGS = 16,
1570 	/**
1571 	 * do not serialize glyph advances,
1572 	 * glyph offsets will reflect absolute glyph positions. Since: 1.8.0
1573 	 */
1574 	NO_ADVANCES = 32,
1575 }
1576 alias hb_buffer_serialize_flags_t buffer_serialize_flags_t;
1577 
1578 /**
1579  * The buffer serialization and de-serialization format used in
1580  * hb_buffer_serialize_glyphs() and hb_buffer_deserialize_glyphs().
1581  *
1582  * Since: 0.9.2
1583  */
1584 public enum hb_buffer_serialize_format_t
1585 {
1586 	/**
1587 	 * a human-readable, plain text format.
1588 	 */
1589 	TEXT = 1413830740,
1590 	/**
1591 	 * a machine-readable JSON format.
1592 	 */
1593 	JSON = 1246973774,
1594 	/**
1595 	 * invalid format.
1596 	 */
1597 	INVALID = 0,
1598 }
1599 alias hb_buffer_serialize_format_t buffer_serialize_format_t;
1600 
1601 /**
1602  * The direction of a text segment or buffer.
1603  *
1604  * A segment can also be tested for horizontal or vertical
1605  * orientation (irrespective of specific direction) with
1606  * HB_DIRECTION_IS_HORIZONTAL() or HB_DIRECTION_IS_VERTICAL().
1607  */
1608 public enum hb_direction_t
1609 {
1610 	/**
1611 	 * Initial, unset direction.
1612 	 */
1613 	INVALID = 0,
1614 	/**
1615 	 * Text is set horizontally from left to right.
1616 	 */
1617 	LTR = 4,
1618 	/**
1619 	 * Text is set horizontally from right to left.
1620 	 */
1621 	RTL = 5,
1622 	/**
1623 	 * Text is set vertically from top to bottom.
1624 	 */
1625 	TTB = 6,
1626 	/**
1627 	 * Text is set vertically from bottom to top.
1628 	 */
1629 	BTT = 7,
1630 }
1631 alias hb_direction_t direction_t;
1632 
1633 /**
1634  * Flags for #hb_glyph_info_t.
1635  *
1636  * Since: 1.5.0
1637  */
1638 public enum hb_glyph_flags_t
1639 {
1640 	/**
1641 	 * Indicates that if input text is broken at the
1642 	 * beginning of the cluster this glyph is part of,
1643 	 * then both sides need to be re-shaped, as the
1644 	 * result might be different.
1645 	 * On the flip side, it means that when this
1646 	 * flag is not present, then it is safe to break
1647 	 * the glyph-run at the beginning of this
1648 	 * cluster, and the two sides will represent the
1649 	 * exact same result one would get if breaking
1650 	 * input text at the beginning of this cluster
1651 	 * and shaping the two sides separately.
1652 	 * This can be used to optimize paragraph
1653 	 * layout, by avoiding re-shaping of each line
1654 	 * after line-breaking.
1655 	 */
1656 	UNSAFE_TO_BREAK = 1,
1657 	/**
1658 	 * Indicates that if input text is changed on one
1659 	 * side of the beginning of the cluster this glyph
1660 	 * is part of, then the shaping results for the
1661 	 * other side might change.
1662 	 * Note that the absence of this flag will NOT by
1663 	 * itself mean that it IS safe to concat text.
1664 	 * Only two pieces of text both of which clear of
1665 	 * this flag can be concatenated safely.
1666 	 * This can be used to optimize paragraph
1667 	 * layout, by avoiding re-shaping of each line
1668 	 * after line-breaking, by limiting the
1669 	 * reshaping to a small piece around the
1670 	 * breaking positin only, even if the breaking
1671 	 * position carries the
1672 	 * #HB_GLYPH_FLAG_UNSAFE_TO_BREAK or when
1673 	 * hyphenation or other text transformation
1674 	 * happens at line-break position, in the following
1675 	 * way:
1676 	 * 1. Iterate back from the line-break position
1677 	 * until the first cluster start position that is
1678 	 * NOT unsafe-to-concat, 2. shape the segment from
1679 	 * there till the end of line, 3. check whether the
1680 	 * resulting glyph-run also is clear of the
1681 	 * unsafe-to-concat at its start-of-text position;
1682 	 * if it is, just splice it into place and the line
1683 	 * is shaped; If not, move on to a position further
1684 	 * back that is clear of unsafe-to-concat and retry
1685 	 * from there, and repeat.
1686 	 * At the start of next line a similar algorithm can
1687 	 * be implemented. That is: 1. Iterate forward from
1688 	 * the line-break position until the first cluster
1689 	 * start position that is NOT unsafe-to-concat, 2.
1690 	 * shape the segment from beginning of the line to
1691 	 * that position, 3. check whether the resulting
1692 	 * glyph-run also is clear of the unsafe-to-concat
1693 	 * at its end-of-text position; if it is, just splice
1694 	 * it into place and the beginning is shaped; If not,
1695 	 * move on to a position further forward that is clear
1696 	 * of unsafe-to-concat and retry up to there, and repeat.
1697 	 * A slight complication will arise in the
1698 	 * implementation of the algorithm above,
1699 	 * because while our buffer API has a way to
1700 	 * return flags for position corresponding to
1701 	 * start-of-text, there is currently no position
1702 	 * corresponding to end-of-text.  This limitation
1703 	 * can be alleviated by shaping more text than needed
1704 	 * and looking for unsafe-to-concat flag within text
1705 	 * clusters.
1706 	 * The #HB_GLYPH_FLAG_UNSAFE_TO_BREAK flag will
1707 	 * always imply this flag.
1708 	 * To use this flag, you must enable the buffer flag
1709 	 * @HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT during
1710 	 * shaping, otherwise the buffer flag will not be
1711 	 * reliably produced.
1712 	 * Since: 4.0.0
1713 	 */
1714 	UNSAFE_TO_CONCAT = 2,
1715 	/**
1716 	 * All the currently defined flags.
1717 	 */
1718 	DEFINED = 3,
1719 }
1720 alias hb_glyph_flags_t glyph_flags_t;
1721 
1722 /**
1723  * Data type holding the memory modes available to
1724  * client programs.
1725  *
1726  * Regarding these various memory-modes:
1727  *
1728  * - In no case shall the HarfBuzz client modify memory
1729  * that is passed to HarfBuzz in a blob.  If there is
1730  * any such possibility, @HB_MEMORY_MODE_DUPLICATE should be used
1731  * such that HarfBuzz makes a copy immediately,
1732  *
1733  * - Use @HB_MEMORY_MODE_READONLY otherwise, unless you really really
1734  * really know what you are doing,
1735  *
1736  * - @HB_MEMORY_MODE_WRITABLE is appropriate if you really made a
1737  * copy of data solely for the purpose of passing to
1738  * HarfBuzz and doing that just once (no reuse!),
1739  *
1740  * - If the font is mmap()ed, it's okay to use
1741  * @HB_MEMORY_READONLY_MAY_MAKE_WRITABLE, however, using that mode
1742  * correctly is very tricky.  Use @HB_MEMORY_MODE_READONLY instead.
1743  */
1744 public enum hb_memory_mode_t
1745 {
1746 	/**
1747 	 * HarfBuzz immediately makes a copy of the data.
1748 	 */
1749 	DUPLICATE = 0,
1750 	/**
1751 	 * HarfBuzz client will never modify the data,
1752 	 * and HarfBuzz will never modify the data.
1753 	 */
1754 	READONLY = 1,
1755 	/**
1756 	 * HarfBuzz client made a copy of the data solely
1757 	 * for HarfBuzz, so HarfBuzz may modify the data.
1758 	 */
1759 	WRITABLE = 2,
1760 	/**
1761 	 * See above
1762 	 */
1763 	READONLY_MAY_MAKE_WRITABLE = 3,
1764 }
1765 alias hb_memory_mode_t memory_mode_t;
1766 
1767 /**
1768  * Flags that describe the properties of color palette.
1769  *
1770  * Since: 2.1.0
1771  */
1772 public enum hb_ot_color_palette_flags_t
1773 {
1774 	/**
1775 	 * Default indicating that there is nothing special
1776 	 * to note about a color palette.
1777 	 */
1778 	DEFAULT = 0,
1779 	/**
1780 	 * Flag indicating that the color
1781 	 * palette is appropriate to use when displaying the font on a light background such as white.
1782 	 */
1783 	USABLE_WITH_LIGHT_BACKGROUND = 1,
1784 	/**
1785 	 * Flag indicating that the color
1786 	 * palette is appropriate to use when displaying the font on a dark background such as black.
1787 	 */
1788 	USABLE_WITH_DARK_BACKGROUND = 2,
1789 }
1790 alias hb_ot_color_palette_flags_t ot_color_palette_flags_t;
1791 
1792 /**
1793  * Baseline tags from [Baseline Tags](https://docs.microsoft.com/en-us/typography/opentype/spec/baselinetags) registry.
1794  *
1795  * Since: 2.6.0
1796  */
1797 public enum hb_ot_layout_baseline_tag_t
1798 {
1799 	/**
1800 	 * The baseline used by alphabetic scripts such as Latin, Cyrillic and Greek.
1801 	 * In vertical writing mode, the alphabetic baseline for characters rotated 90 degrees clockwise.
1802 	 * (This would not apply to alphabetic characters that remain upright in vertical writing mode, since these
1803 	 * characters are not rotated.)
1804 	 */
1805 	ROMAN = 1919905134,
1806 	/**
1807 	 * The hanging baseline. In horizontal direction, this is the horizontal
1808 	 * line from which syllables seem, to hang in Tibetan and other similar scripts. In vertical writing mode,
1809 	 * for Tibetan (or some other similar script) characters rotated 90 degrees clockwise.
1810 	 */
1811 	HANGING = 1751215719,
1812 	/**
1813 	 * Ideographic character face bottom or left edge,
1814 	 * if the direction is horizontal or vertical, respectively.
1815 	 */
1816 	IDEO_FACE_BOTTOM_OR_LEFT = 1768121954,
1817 	/**
1818 	 * Ideographic character face top or right edge,
1819 	 * if the direction is horizontal or vertical, respectively.
1820 	 */
1821 	IDEO_FACE_TOP_OR_RIGHT = 1768121972,
1822 	/**
1823 	 * The center of the ideographic character face. Since: 4.0.0
1824 	 */
1825 	IDEO_FACE_CENTRAL = 1231251043,
1826 	/**
1827 	 * Ideographic em-box bottom or left edge,
1828 	 * if the direction is horizontal or vertical, respectively.
1829 	 */
1830 	IDEO_EMBOX_BOTTOM_OR_LEFT = 1768187247,
1831 	/**
1832 	 * Ideographic em-box top or right edge baseline,
1833 	 */
1834 	IDEO_EMBOX_TOP_OR_RIGHT = 1768191088,
1835 	/**
1836 	 * The center of the ideographic em-box. Since: 4.0.0
1837 	 * if the direction is horizontal or vertical, respectively.
1838 	 */
1839 	IDEO_EMBOX_CENTRAL = 1231315813,
1840 	/**
1841 	 * The baseline about which mathematical characters are centered.
1842 	 * In vertical writing mode when mathematical characters rotated 90 degrees clockwise, are centered.
1843 	 */
1844 	MATH = 1835103336,
1845 }
1846 alias hb_ot_layout_baseline_tag_t ot_layout_baseline_tag_t;
1847 
1848 /**
1849  * The GDEF classes defined for glyphs.
1850  */
1851 public enum hb_ot_layout_glyph_class_t
1852 {
1853 	/**
1854 	 * Glyphs not matching the other classifications
1855 	 */
1856 	UNCLASSIFIED = 0,
1857 	/**
1858 	 * Spacing, single characters, capable of accepting marks
1859 	 */
1860 	BASE_GLYPH = 1,
1861 	/**
1862 	 * Glyphs that represent ligation of multiple characters
1863 	 */
1864 	LIGATURE = 2,
1865 	/**
1866 	 * Non-spacing, combining glyphs that represent marks
1867 	 */
1868 	MARK = 3,
1869 	/**
1870 	 * Spacing glyphs that represent part of a single character
1871 	 */
1872 	COMPONENT = 4,
1873 }
1874 alias hb_ot_layout_glyph_class_t ot_layout_glyph_class_t;
1875 
1876 /**
1877  * The 'MATH' table constants, refer to
1878  * [OpenType documentation](https://docs.microsoft.com/en-us/typography/opentype/spec/math#mathconstants-table)
1879  * For more explanations.
1880  *
1881  * Since: 1.3.3
1882  */
1883 public enum hb_ot_math_constant_t
1884 {
1885 	/**
1886 	 * scriptPercentScaleDown
1887 	 */
1888 	SCRIPT_PERCENT_SCALE_DOWN = 0,
1889 	/**
1890 	 * scriptScriptPercentScaleDown
1891 	 */
1892 	SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = 1,
1893 	/**
1894 	 * delimitedSubFormulaMinHeight
1895 	 */
1896 	DELIMITED_SUB_FORMULA_MIN_HEIGHT = 2,
1897 	/**
1898 	 * displayOperatorMinHeight
1899 	 */
1900 	DISPLAY_OPERATOR_MIN_HEIGHT = 3,
1901 	/**
1902 	 * mathLeading
1903 	 */
1904 	MATH_LEADING = 4,
1905 	/**
1906 	 * axisHeight
1907 	 */
1908 	AXIS_HEIGHT = 5,
1909 	/**
1910 	 * accentBaseHeight
1911 	 */
1912 	ACCENT_BASE_HEIGHT = 6,
1913 	/**
1914 	 * flattenedAccentBaseHeight
1915 	 */
1916 	FLATTENED_ACCENT_BASE_HEIGHT = 7,
1917 	/**
1918 	 * subscriptShiftDown
1919 	 */
1920 	SUBSCRIPT_SHIFT_DOWN = 8,
1921 	/**
1922 	 * subscriptTopMax
1923 	 */
1924 	SUBSCRIPT_TOP_MAX = 9,
1925 	/**
1926 	 * subscriptBaselineDropMin
1927 	 */
1928 	SUBSCRIPT_BASELINE_DROP_MIN = 10,
1929 	/**
1930 	 * superscriptShiftUp
1931 	 */
1932 	SUPERSCRIPT_SHIFT_UP = 11,
1933 	/**
1934 	 * superscriptShiftUpCramped
1935 	 */
1936 	SUPERSCRIPT_SHIFT_UP_CRAMPED = 12,
1937 	/**
1938 	 * superscriptBottomMin
1939 	 */
1940 	SUPERSCRIPT_BOTTOM_MIN = 13,
1941 	/**
1942 	 * superscriptBaselineDropMax
1943 	 */
1944 	SUPERSCRIPT_BASELINE_DROP_MAX = 14,
1945 	/**
1946 	 * subSuperscriptGapMin
1947 	 */
1948 	SUB_SUPERSCRIPT_GAP_MIN = 15,
1949 	/**
1950 	 * superscriptBottomMaxWithSubscript
1951 	 */
1952 	SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = 16,
1953 	/**
1954 	 * spaceAfterScript
1955 	 */
1956 	SPACE_AFTER_SCRIPT = 17,
1957 	/**
1958 	 * upperLimitGapMin
1959 	 */
1960 	UPPER_LIMIT_GAP_MIN = 18,
1961 	/**
1962 	 * upperLimitBaselineRiseMin
1963 	 */
1964 	UPPER_LIMIT_BASELINE_RISE_MIN = 19,
1965 	/**
1966 	 * lowerLimitGapMin
1967 	 */
1968 	LOWER_LIMIT_GAP_MIN = 20,
1969 	/**
1970 	 * lowerLimitBaselineDropMin
1971 	 */
1972 	LOWER_LIMIT_BASELINE_DROP_MIN = 21,
1973 	/**
1974 	 * stackTopShiftUp
1975 	 */
1976 	STACK_TOP_SHIFT_UP = 22,
1977 	/**
1978 	 * stackTopDisplayStyleShiftUp
1979 	 */
1980 	STACK_TOP_DISPLAY_STYLE_SHIFT_UP = 23,
1981 	/**
1982 	 * stackBottomShiftDown
1983 	 */
1984 	STACK_BOTTOM_SHIFT_DOWN = 24,
1985 	/**
1986 	 * stackBottomDisplayStyleShiftDown
1987 	 */
1988 	STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = 25,
1989 	/**
1990 	 * stackGapMin
1991 	 */
1992 	STACK_GAP_MIN = 26,
1993 	/**
1994 	 * stackDisplayStyleGapMin
1995 	 */
1996 	STACK_DISPLAY_STYLE_GAP_MIN = 27,
1997 	/**
1998 	 * stretchStackTopShiftUp
1999 	 */
2000 	STRETCH_STACK_TOP_SHIFT_UP = 28,
2001 	/**
2002 	 * stretchStackBottomShiftDown
2003 	 */
2004 	STRETCH_STACK_BOTTOM_SHIFT_DOWN = 29,
2005 	/**
2006 	 * stretchStackGapAboveMin
2007 	 */
2008 	STRETCH_STACK_GAP_ABOVE_MIN = 30,
2009 	/**
2010 	 * stretchStackGapBelowMin
2011 	 */
2012 	STRETCH_STACK_GAP_BELOW_MIN = 31,
2013 	/**
2014 	 * fractionNumeratorShiftUp
2015 	 */
2016 	FRACTION_NUMERATOR_SHIFT_UP = 32,
2017 	/**
2018 	 * fractionNumeratorDisplayStyleShiftUp
2019 	 */
2020 	FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = 33,
2021 	/**
2022 	 * fractionDenominatorShiftDown
2023 	 */
2024 	FRACTION_DENOMINATOR_SHIFT_DOWN = 34,
2025 	/**
2026 	 * fractionDenominatorDisplayStyleShiftDown
2027 	 */
2028 	FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = 35,
2029 	/**
2030 	 * fractionNumeratorGapMin
2031 	 */
2032 	FRACTION_NUMERATOR_GAP_MIN = 36,
2033 	/**
2034 	 * fractionNumDisplayStyleGapMin
2035 	 */
2036 	FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = 37,
2037 	/**
2038 	 * fractionRuleThickness
2039 	 */
2040 	FRACTION_RULE_THICKNESS = 38,
2041 	/**
2042 	 * fractionDenominatorGapMin
2043 	 */
2044 	FRACTION_DENOMINATOR_GAP_MIN = 39,
2045 	/**
2046 	 * fractionDenomDisplayStyleGapMin
2047 	 */
2048 	FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = 40,
2049 	/**
2050 	 * skewedFractionHorizontalGap
2051 	 */
2052 	SKEWED_FRACTION_HORIZONTAL_GAP = 41,
2053 	/**
2054 	 * skewedFractionVerticalGap
2055 	 */
2056 	SKEWED_FRACTION_VERTICAL_GAP = 42,
2057 	/**
2058 	 * overbarVerticalGap
2059 	 */
2060 	OVERBAR_VERTICAL_GAP = 43,
2061 	/**
2062 	 * overbarRuleThickness
2063 	 */
2064 	OVERBAR_RULE_THICKNESS = 44,
2065 	/**
2066 	 * overbarExtraAscender
2067 	 */
2068 	OVERBAR_EXTRA_ASCENDER = 45,
2069 	/**
2070 	 * underbarVerticalGap
2071 	 */
2072 	UNDERBAR_VERTICAL_GAP = 46,
2073 	/**
2074 	 * underbarRuleThickness
2075 	 */
2076 	UNDERBAR_RULE_THICKNESS = 47,
2077 	/**
2078 	 * underbarExtraDescender
2079 	 */
2080 	UNDERBAR_EXTRA_DESCENDER = 48,
2081 	/**
2082 	 * radicalVerticalGap
2083 	 */
2084 	RADICAL_VERTICAL_GAP = 49,
2085 	/**
2086 	 * radicalDisplayStyleVerticalGap
2087 	 */
2088 	RADICAL_DISPLAY_STYLE_VERTICAL_GAP = 50,
2089 	/**
2090 	 * radicalRuleThickness
2091 	 */
2092 	RADICAL_RULE_THICKNESS = 51,
2093 	/**
2094 	 * radicalExtraAscender
2095 	 */
2096 	RADICAL_EXTRA_ASCENDER = 52,
2097 	/**
2098 	 * radicalKernBeforeDegree
2099 	 */
2100 	RADICAL_KERN_BEFORE_DEGREE = 53,
2101 	/**
2102 	 * radicalKernAfterDegree
2103 	 */
2104 	RADICAL_KERN_AFTER_DEGREE = 54,
2105 	/**
2106 	 * radicalDegreeBottomRaisePercent
2107 	 */
2108 	RADICAL_DEGREE_BOTTOM_RAISE_PERCENT = 55,
2109 }
2110 alias hb_ot_math_constant_t ot_math_constant_t;
2111 
2112 /**
2113  * Flags for math glyph parts.
2114  *
2115  * Since: 1.3.3
2116  */
2117 public enum hb_ot_math_glyph_part_flags_t
2118 {
2119 	/**
2120 	 * This is an extender glyph part that
2121 	 * can be repeated to reach the desired length.
2122 	 */
2123 	EXTENDER = 1,
2124 }
2125 alias hb_ot_math_glyph_part_flags_t ot_math_glyph_part_flags_t;
2126 
2127 /**
2128  * The math kerning-table types defined for the four corners
2129  * of a glyph.
2130  *
2131  * Since: 1.3.3
2132  */
2133 public enum hb_ot_math_kern_t
2134 {
2135 	/**
2136 	 * The top right corner of the glyph.
2137 	 */
2138 	TOP_RIGHT = 0,
2139 	/**
2140 	 * The top left corner of the glyph.
2141 	 */
2142 	TOP_LEFT = 1,
2143 	/**
2144 	 * The bottom right corner of the glyph.
2145 	 */
2146 	BOTTOM_RIGHT = 2,
2147 	/**
2148 	 * The bottom left corner of the glyph.
2149 	 */
2150 	BOTTOM_LEFT = 3,
2151 }
2152 alias hb_ot_math_kern_t ot_math_kern_t;
2153 
2154 /**
2155  * Known metadata tags from https://docs.microsoft.com/en-us/typography/opentype/spec/meta
2156  *
2157  * Since: 2.6.0
2158  */
2159 public enum hb_ot_meta_tag_t
2160 {
2161 	/**
2162 	 * Design languages. Text, using only
2163 	 * Basic Latin (ASCII) characters. Indicates languages and/or scripts
2164 	 * for the user audiences that the font was primarily designed for.
2165 	 */
2166 	DESIGN_LANGUAGES = 1684827751,
2167 	/**
2168 	 * Supported languages. Text, using
2169 	 * only Basic Latin (ASCII) characters. Indicates languages and/or scripts
2170 	 * that the font is declared to be capable of supporting.
2171 	 */
2172 	SUPPORTED_LANGUAGES = 1936485991,
2173 }
2174 alias hb_ot_meta_tag_t ot_meta_tag_t;
2175 
2176 /**
2177  * Metric tags corresponding to [MVAR Value
2178  * Tags](https://docs.microsoft.com/en-us/typography/opentype/spec/mvar#value-tags)
2179  *
2180  * Since: 2.6.0
2181  */
2182 public enum hb_ot_metrics_tag_t
2183 {
2184 	/**
2185 	 * horizontal ascender.
2186 	 */
2187 	HORIZONTAL_ASCENDER = 1751216995,
2188 	/**
2189 	 * horizontal descender.
2190 	 */
2191 	HORIZONTAL_DESCENDER = 1751413603,
2192 	/**
2193 	 * horizontal line gap.
2194 	 */
2195 	HORIZONTAL_LINE_GAP = 1751934832,
2196 	/**
2197 	 * horizontal clipping ascent.
2198 	 */
2199 	HORIZONTAL_CLIPPING_ASCENT = 1751346273,
2200 	/**
2201 	 * horizontal clipping descent.
2202 	 */
2203 	HORIZONTAL_CLIPPING_DESCENT = 1751346276,
2204 	/**
2205 	 * vertical ascender.
2206 	 */
2207 	VERTICAL_ASCENDER = 1986098019,
2208 	/**
2209 	 * vertical descender.
2210 	 */
2211 	VERTICAL_DESCENDER = 1986294627,
2212 	/**
2213 	 * vertical line gap.
2214 	 */
2215 	VERTICAL_LINE_GAP = 1986815856,
2216 	/**
2217 	 * horizontal caret rise.
2218 	 */
2219 	HORIZONTAL_CARET_RISE = 1751347827,
2220 	/**
2221 	 * horizontal caret run.
2222 	 */
2223 	HORIZONTAL_CARET_RUN = 1751347822,
2224 	/**
2225 	 * horizontal caret offset.
2226 	 */
2227 	HORIZONTAL_CARET_OFFSET = 1751347046,
2228 	/**
2229 	 * vertical caret rise.
2230 	 */
2231 	VERTICAL_CARET_RISE = 1986228851,
2232 	/**
2233 	 * vertical caret run.
2234 	 */
2235 	VERTICAL_CARET_RUN = 1986228846,
2236 	/**
2237 	 * vertical caret offset.
2238 	 */
2239 	VERTICAL_CARET_OFFSET = 1986228070,
2240 	/**
2241 	 * x height.
2242 	 */
2243 	X_HEIGHT = 2020108148,
2244 	/**
2245 	 * cap height.
2246 	 */
2247 	CAP_HEIGHT = 1668311156,
2248 	/**
2249 	 * subscript em x size.
2250 	 */
2251 	SUBSCRIPT_EM_X_SIZE = 1935833203,
2252 	/**
2253 	 * subscript em y size.
2254 	 */
2255 	SUBSCRIPT_EM_Y_SIZE = 1935833459,
2256 	/**
2257 	 * subscript em x offset.
2258 	 */
2259 	SUBSCRIPT_EM_X_OFFSET = 1935833199,
2260 	/**
2261 	 * subscript em y offset.
2262 	 */
2263 	SUBSCRIPT_EM_Y_OFFSET = 1935833455,
2264 	/**
2265 	 * superscript em x size.
2266 	 */
2267 	SUPERSCRIPT_EM_X_SIZE = 1936750707,
2268 	/**
2269 	 * superscript em y size.
2270 	 */
2271 	SUPERSCRIPT_EM_Y_SIZE = 1936750963,
2272 	/**
2273 	 * superscript em x offset.
2274 	 */
2275 	SUPERSCRIPT_EM_X_OFFSET = 1936750703,
2276 	/**
2277 	 * superscript em y offset.
2278 	 */
2279 	SUPERSCRIPT_EM_Y_OFFSET = 1936750959,
2280 	/**
2281 	 * strikeout size.
2282 	 */
2283 	STRIKEOUT_SIZE = 1937011315,
2284 	/**
2285 	 * strikeout offset.
2286 	 */
2287 	STRIKEOUT_OFFSET = 1937011311,
2288 	/**
2289 	 * underline size.
2290 	 */
2291 	UNDERLINE_SIZE = 1970168947,
2292 	/**
2293 	 * underline offset.
2294 	 */
2295 	UNDERLINE_OFFSET = 1970168943,
2296 }
2297 alias hb_ot_metrics_tag_t ot_metrics_tag_t;
2298 
2299 /**
2300  * Flags for #hb_ot_var_axis_info_t.
2301  *
2302  * Since: 2.2.0
2303  */
2304 public enum hb_ot_var_axis_flags_t
2305 {
2306 	/**
2307 	 * The axis should not be exposed directly in user interfaces.
2308 	 */
2309 	HIDDEN = 1,
2310 }
2311 alias hb_ot_var_axis_flags_t ot_var_axis_flags_t;
2312 
2313 /**
2314  * Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding
2315  * to the four-letter values defined by [ISO 15924](https://unicode.org/iso15924/).
2316  *
2317  * See also the Script (sc) property of the Unicode Character Database.
2318  */
2319 public enum hb_script_t
2320 {
2321 	/**
2322 	 * `Zyyy`
2323 	 */
2324 	COMMON = 1517910393,
2325 	/**
2326 	 * `Zinh`
2327 	 */
2328 	INHERITED = 1516858984,
2329 	/**
2330 	 * `Zzzz`
2331 	 */
2332 	UNKNOWN = 1517976186,
2333 	/**
2334 	 * `Arab`
2335 	 */
2336 	ARABIC = 1098015074,
2337 	/**
2338 	 * `Armn`
2339 	 */
2340 	ARMENIAN = 1098018158,
2341 	/**
2342 	 * `Beng`
2343 	 */
2344 	BENGALI = 1113943655,
2345 	/**
2346 	 * `Cyrl`
2347 	 */
2348 	CYRILLIC = 1132032620,
2349 	/**
2350 	 * `Deva`
2351 	 */
2352 	DEVANAGARI = 1147500129,
2353 	/**
2354 	 * `Geor`
2355 	 */
2356 	GEORGIAN = 1197830002,
2357 	/**
2358 	 * `Grek`
2359 	 */
2360 	GREEK = 1198679403,
2361 	/**
2362 	 * `Gujr`
2363 	 */
2364 	GUJARATI = 1198877298,
2365 	/**
2366 	 * `Guru`
2367 	 */
2368 	GURMUKHI = 1198879349,
2369 	/**
2370 	 * `Hang`
2371 	 */
2372 	HANGUL = 1214344807,
2373 	/**
2374 	 * `Hani`
2375 	 */
2376 	HAN = 1214344809,
2377 	/**
2378 	 * `Hebr`
2379 	 */
2380 	HEBREW = 1214603890,
2381 	/**
2382 	 * `Hira`
2383 	 */
2384 	HIRAGANA = 1214870113,
2385 	/**
2386 	 * `Knda`
2387 	 */
2388 	KANNADA = 1265525857,
2389 	/**
2390 	 * `Kana`
2391 	 */
2392 	KATAKANA = 1264676449,
2393 	/**
2394 	 * `Laoo`
2395 	 */
2396 	LAO = 1281453935,
2397 	/**
2398 	 * `Latn`
2399 	 */
2400 	LATIN = 1281455214,
2401 	/**
2402 	 * `Mlym`
2403 	 */
2404 	MALAYALAM = 1298954605,
2405 	/**
2406 	 * `Orya`
2407 	 */
2408 	ORIYA = 1332902241,
2409 	/**
2410 	 * `Taml`
2411 	 */
2412 	TAMIL = 1415671148,
2413 	/**
2414 	 * `Telu`
2415 	 */
2416 	TELUGU = 1415933045,
2417 	/**
2418 	 * `Thai`
2419 	 */
2420 	THAI = 1416126825,
2421 	/**
2422 	 * `Tibt`
2423 	 */
2424 	TIBETAN = 1416192628,
2425 	/**
2426 	 * `Bopo`
2427 	 */
2428 	BOPOMOFO = 1114599535,
2429 	/**
2430 	 * `Brai`
2431 	 */
2432 	BRAILLE = 1114792297,
2433 	/**
2434 	 * `Cans`
2435 	 */
2436 	CANADIAN_SYLLABICS = 1130458739,
2437 	/**
2438 	 * `Cher`
2439 	 */
2440 	CHEROKEE = 1130915186,
2441 	/**
2442 	 * `Ethi`
2443 	 */
2444 	ETHIOPIC = 1165256809,
2445 	/**
2446 	 * `Khmr`
2447 	 */
2448 	KHMER = 1265134962,
2449 	/**
2450 	 * `Mong`
2451 	 */
2452 	MONGOLIAN = 1299148391,
2453 	/**
2454 	 * `Mymr`
2455 	 */
2456 	MYANMAR = 1299803506,
2457 	/**
2458 	 * `Ogam`
2459 	 */
2460 	OGHAM = 1332175213,
2461 	/**
2462 	 * `Runr`
2463 	 */
2464 	RUNIC = 1383427698,
2465 	/**
2466 	 * `Sinh`
2467 	 */
2468 	SINHALA = 1399418472,
2469 	/**
2470 	 * `Syrc`
2471 	 */
2472 	SYRIAC = 1400468067,
2473 	/**
2474 	 * `Thaa`
2475 	 */
2476 	THAANA = 1416126817,
2477 	/**
2478 	 * `Yiii`
2479 	 */
2480 	YI = 1500080489,
2481 	/**
2482 	 * `Dsrt`
2483 	 */
2484 	DESERET = 1148416628,
2485 	/**
2486 	 * `Goth`
2487 	 */
2488 	GOTHIC = 1198486632,
2489 	/**
2490 	 * `Ital`
2491 	 */
2492 	OLD_ITALIC = 1232363884,
2493 	/**
2494 	 * `Buhd`
2495 	 */
2496 	BUHID = 1114990692,
2497 	/**
2498 	 * `Hano`
2499 	 */
2500 	HANUNOO = 1214344815,
2501 	/**
2502 	 * `Tglg`
2503 	 */
2504 	TAGALOG = 1416064103,
2505 	/**
2506 	 * `Tagb`
2507 	 */
2508 	TAGBANWA = 1415669602,
2509 	/**
2510 	 * `Cprt`
2511 	 */
2512 	CYPRIOT = 1131442804,
2513 	/**
2514 	 * `Limb`
2515 	 */
2516 	LIMBU = 1281977698,
2517 	/**
2518 	 * `Linb`
2519 	 */
2520 	LINEAR_B = 1281977954,
2521 	/**
2522 	 * `Osma`
2523 	 */
2524 	OSMANYA = 1332964705,
2525 	/**
2526 	 * `Shaw`
2527 	 */
2528 	SHAVIAN = 1399349623,
2529 	/**
2530 	 * `Tale`
2531 	 */
2532 	TAI_LE = 1415670885,
2533 	/**
2534 	 * `Ugar`
2535 	 */
2536 	UGARITIC = 1432838514,
2537 	/**
2538 	 * `Bugi`
2539 	 */
2540 	BUGINESE = 1114990441,
2541 	/**
2542 	 * `Copt`
2543 	 */
2544 	COPTIC = 1131376756,
2545 	/**
2546 	 * `Glag`
2547 	 */
2548 	GLAGOLITIC = 1198285159,
2549 	/**
2550 	 * `Khar`
2551 	 */
2552 	KHAROSHTHI = 1265131890,
2553 	/**
2554 	 * `Talu`
2555 	 */
2556 	NEW_TAI_LUE = 1415670901,
2557 	/**
2558 	 * `Xpeo`
2559 	 */
2560 	OLD_PERSIAN = 1483761007,
2561 	/**
2562 	 * `Sylo`
2563 	 */
2564 	SYLOTI_NAGRI = 1400466543,
2565 	/**
2566 	 * `Tfng`
2567 	 */
2568 	TIFINAGH = 1415999079,
2569 	/**
2570 	 * `Bali`
2571 	 */
2572 	BALINESE = 1113681001,
2573 	/**
2574 	 * `Xsux`
2575 	 */
2576 	CUNEIFORM = 1483961720,
2577 	/**
2578 	 * `Nkoo`
2579 	 */
2580 	NKO = 1315663727,
2581 	/**
2582 	 * `Phag`
2583 	 */
2584 	PHAGS_PA = 1349017959,
2585 	/**
2586 	 * `Phnx`
2587 	 */
2588 	PHOENICIAN = 1349021304,
2589 	/**
2590 	 * `Cari`
2591 	 */
2592 	CARIAN = 1130459753,
2593 	/**
2594 	 * `Cham`
2595 	 */
2596 	CHAM = 1130914157,
2597 	/**
2598 	 * `Kali`
2599 	 */
2600 	KAYAH_LI = 1264675945,
2601 	/**
2602 	 * `Lepc`
2603 	 */
2604 	LEPCHA = 1281716323,
2605 	/**
2606 	 * `Lyci`
2607 	 */
2608 	LYCIAN = 1283023721,
2609 	/**
2610 	 * `Lydi`
2611 	 */
2612 	LYDIAN = 1283023977,
2613 	/**
2614 	 * `Olck`
2615 	 */
2616 	OL_CHIKI = 1332503403,
2617 	/**
2618 	 * `Rjng`
2619 	 */
2620 	REJANG = 1382706791,
2621 	/**
2622 	 * `Saur`
2623 	 */
2624 	SAURASHTRA = 1398895986,
2625 	/**
2626 	 * `Sund`
2627 	 */
2628 	SUNDANESE = 1400204900,
2629 	/**
2630 	 * `Vaii`
2631 	 */
2632 	VAI = 1449224553,
2633 	/**
2634 	 * `Avst`
2635 	 */
2636 	AVESTAN = 1098281844,
2637 	/**
2638 	 * `Bamu`
2639 	 */
2640 	BAMUM = 1113681269,
2641 	/**
2642 	 * `Egyp`
2643 	 */
2644 	EGYPTIAN_HIEROGLYPHS = 1164409200,
2645 	/**
2646 	 * `Armi`
2647 	 */
2648 	IMPERIAL_ARAMAIC = 1098018153,
2649 	/**
2650 	 * `Phli`
2651 	 */
2652 	INSCRIPTIONAL_PAHLAVI = 1349020777,
2653 	/**
2654 	 * `Prti`
2655 	 */
2656 	INSCRIPTIONAL_PARTHIAN = 1349678185,
2657 	/**
2658 	 * `Java`
2659 	 */
2660 	JAVANESE = 1247901281,
2661 	/**
2662 	 * `Kthi`
2663 	 */
2664 	KAITHI = 1265920105,
2665 	/**
2666 	 * `Lisu`
2667 	 */
2668 	LISU = 1281979253,
2669 	/**
2670 	 * `Mtei`
2671 	 */
2672 	MEETEI_MAYEK = 1299473769,
2673 	/**
2674 	 * `Sarb`
2675 	 */
2676 	OLD_SOUTH_ARABIAN = 1398895202,
2677 	/**
2678 	 * `Orkh`
2679 	 */
2680 	OLD_TURKIC = 1332898664,
2681 	/**
2682 	 * `Samr`
2683 	 */
2684 	SAMARITAN = 1398893938,
2685 	/**
2686 	 * `Lana`
2687 	 */
2688 	TAI_THAM = 1281453665,
2689 	/**
2690 	 * `Tavt`
2691 	 */
2692 	TAI_VIET = 1415673460,
2693 	/**
2694 	 * `Batk`
2695 	 */
2696 	BATAK = 1113683051,
2697 	/**
2698 	 * `Brah`
2699 	 */
2700 	BRAHMI = 1114792296,
2701 	/**
2702 	 * `Mand`
2703 	 */
2704 	MANDAIC = 1298230884,
2705 	/**
2706 	 * `Cakm`
2707 	 */
2708 	CHAKMA = 1130457965,
2709 	/**
2710 	 * `Merc`
2711 	 */
2712 	MEROITIC_CURSIVE = 1298494051,
2713 	/**
2714 	 * `Mero`
2715 	 */
2716 	MEROITIC_HIEROGLYPHS = 1298494063,
2717 	/**
2718 	 * `Plrd`
2719 	 */
2720 	MIAO = 1349284452,
2721 	/**
2722 	 * `Shrd`
2723 	 */
2724 	SHARADA = 1399353956,
2725 	/**
2726 	 * `Sora`
2727 	 */
2728 	SORA_SOMPENG = 1399812705,
2729 	/**
2730 	 * `Takr`
2731 	 */
2732 	TAKRI = 1415670642,
2733 	/**
2734 	 * `Bass`, Since: 0.9.30
2735 	 */
2736 	BASSA_VAH = 1113682803,
2737 	/**
2738 	 * `Aghb`, Since: 0.9.30
2739 	 */
2740 	CAUCASIAN_ALBANIAN = 1097295970,
2741 	/**
2742 	 * `Dupl`, Since: 0.9.30
2743 	 */
2744 	DUPLOYAN = 1148547180,
2745 	/**
2746 	 * `Elba`, Since: 0.9.30
2747 	 */
2748 	ELBASAN = 1164730977,
2749 	/**
2750 	 * `Gran`, Since: 0.9.30
2751 	 */
2752 	GRANTHA = 1198678382,
2753 	/**
2754 	 * `Khoj`, Since: 0.9.30
2755 	 */
2756 	KHOJKI = 1265135466,
2757 	/**
2758 	 * `Sind`, Since: 0.9.30
2759 	 */
2760 	KHUDAWADI = 1399418468,
2761 	/**
2762 	 * `Lina`, Since: 0.9.30
2763 	 */
2764 	LINEAR_A = 1281977953,
2765 	/**
2766 	 * `Mahj`, Since: 0.9.30
2767 	 */
2768 	MAHAJANI = 1298229354,
2769 	/**
2770 	 * `Mani`, Since: 0.9.30
2771 	 */
2772 	MANICHAEAN = 1298230889,
2773 	/**
2774 	 * `Mend`, Since: 0.9.30
2775 	 */
2776 	MENDE_KIKAKUI = 1298493028,
2777 	/**
2778 	 * `Modi`, Since: 0.9.30
2779 	 */
2780 	MODI = 1299145833,
2781 	/**
2782 	 * `Mroo`, Since: 0.9.30
2783 	 */
2784 	MRO = 1299345263,
2785 	/**
2786 	 * `Nbat`, Since: 0.9.30
2787 	 */
2788 	NABATAEAN = 1315070324,
2789 	/**
2790 	 * `Narb`, Since: 0.9.30
2791 	 */
2792 	OLD_NORTH_ARABIAN = 1315009122,
2793 	/**
2794 	 * `Perm`, Since: 0.9.30
2795 	 */
2796 	OLD_PERMIC = 1348825709,
2797 	/**
2798 	 * `Hmng`, Since: 0.9.30
2799 	 */
2800 	PAHAWH_HMONG = 1215131239,
2801 	/**
2802 	 * `Palm`, Since: 0.9.30
2803 	 */
2804 	PALMYRENE = 1348562029,
2805 	/**
2806 	 * `Pauc`, Since: 0.9.30
2807 	 */
2808 	PAU_CIN_HAU = 1348564323,
2809 	/**
2810 	 * `Phlp`, Since: 0.9.30
2811 	 */
2812 	PSALTER_PAHLAVI = 1349020784,
2813 	/**
2814 	 * `Sidd`, Since: 0.9.30
2815 	 */
2816 	SIDDHAM = 1399415908,
2817 	/**
2818 	 * `Tirh`, Since: 0.9.30
2819 	 */
2820 	TIRHUTA = 1416196712,
2821 	/**
2822 	 * `Wara`, Since: 0.9.30
2823 	 */
2824 	WARANG_CITI = 1466004065,
2825 	/**
2826 	 * `Ahom`, Since: 0.9.30
2827 	 */
2828 	AHOM = 1097363309,
2829 	/**
2830 	 * `Hluw`, Since: 0.9.30
2831 	 */
2832 	ANATOLIAN_HIEROGLYPHS = 1215067511,
2833 	/**
2834 	 * `Hatr`, Since: 0.9.30
2835 	 */
2836 	HATRAN = 1214346354,
2837 	/**
2838 	 * `Mult`, Since: 0.9.30
2839 	 */
2840 	MULTANI = 1299541108,
2841 	/**
2842 	 * `Hung`, Since: 0.9.30
2843 	 */
2844 	OLD_HUNGARIAN = 1215655527,
2845 	/**
2846 	 * `Sgnw`, Since: 0.9.30
2847 	 */
2848 	SIGNWRITING = 1399287415,
2849 	/**
2850 	 * `Adlm`, Since: 1.3.0
2851 	 */
2852 	ADLAM = 1097100397,
2853 	/**
2854 	 * `Bhks`, Since: 1.3.0
2855 	 */
2856 	BHAIKSUKI = 1114139507,
2857 	/**
2858 	 * `Marc`, Since: 1.3.0
2859 	 */
2860 	MARCHEN = 1298231907,
2861 	/**
2862 	 * `Osge`, Since: 1.3.0
2863 	 */
2864 	OSAGE = 1332963173,
2865 	/**
2866 	 * `Tang`, Since: 1.3.0
2867 	 */
2868 	TANGUT = 1415671399,
2869 	/**
2870 	 * `Newa`, Since: 1.3.0
2871 	 */
2872 	NEWA = 1315272545,
2873 	/**
2874 	 * `Gonm`, Since: 1.6.0
2875 	 */
2876 	MASARAM_GONDI = 1198485101,
2877 	/**
2878 	 * `Nshu`, Since: 1.6.0
2879 	 */
2880 	NUSHU = 1316186229,
2881 	/**
2882 	 * `Soyo`, Since: 1.6.0
2883 	 */
2884 	SOYOMBO = 1399814511,
2885 	/**
2886 	 * `Zanb`, Since: 1.6.0
2887 	 */
2888 	ZANABAZAR_SQUARE = 1516334690,
2889 	/**
2890 	 * `Dogr`, Since: 1.8.0
2891 	 */
2892 	DOGRA = 1148151666,
2893 	/**
2894 	 * `Gong`, Since: 1.8.0
2895 	 */
2896 	GUNJALA_GONDI = 1198485095,
2897 	/**
2898 	 * `Rohg`, Since: 1.8.0
2899 	 */
2900 	HANIFI_ROHINGYA = 1383032935,
2901 	/**
2902 	 * `Maka`, Since: 1.8.0
2903 	 */
2904 	MAKASAR = 1298230113,
2905 	/**
2906 	 * `Medf`, Since: 1.8.0
2907 	 */
2908 	MEDEFAIDRIN = 1298490470,
2909 	/**
2910 	 * `Sogo`, Since: 1.8.0
2911 	 */
2912 	OLD_SOGDIAN = 1399809903,
2913 	/**
2914 	 * `Sogd`, Since: 1.8.0
2915 	 */
2916 	SOGDIAN = 1399809892,
2917 	/**
2918 	 * `Elym`, Since: 2.4.0
2919 	 */
2920 	ELYMAIC = 1164736877,
2921 	/**
2922 	 * `Nand`, Since: 2.4.0
2923 	 */
2924 	NANDINAGARI = 1315008100,
2925 	/**
2926 	 * `Hmnp`, Since: 2.4.0
2927 	 */
2928 	NYIAKENG_PUACHUE_HMONG = 1215131248,
2929 	/**
2930 	 * `Wcho`, Since: 2.4.0
2931 	 */
2932 	WANCHO = 1466132591,
2933 	/**
2934 	 * `Chrs`, Since: 2.6.7
2935 	 */
2936 	CHORASMIAN = 1130918515,
2937 	/**
2938 	 * `Diak`, Since: 2.6.7
2939 	 */
2940 	DIVES_AKURU = 1147756907,
2941 	/**
2942 	 * `Kits`, Since: 2.6.7
2943 	 */
2944 	KHITAN_SMALL_SCRIPT = 1265202291,
2945 	/**
2946 	 * `Yezi`, Since: 2.6.7
2947 	 */
2948 	YEZIDI = 1499822697,
2949 	/**
2950 	 * `Cpmn`, Since: 3.0.0
2951 	 */
2952 	CYPRO_MINOAN = 1131441518,
2953 	/**
2954 	 * `Ougr`, Since: 3.0.0
2955 	 */
2956 	OLD_UYGHUR = 1333094258,
2957 	/**
2958 	 * `Tnsa`, Since: 3.0.0
2959 	 */
2960 	TANGSA = 1416524641,
2961 	/**
2962 	 * `Toto`, Since: 3.0.0
2963 	 */
2964 	TOTO = 1416590447,
2965 	/**
2966 	 * `Vith`, Since: 3.0.0
2967 	 */
2968 	VITHKUQI = 1449751656,
2969 	/**
2970 	 * `Zmth`, Since: 3.4.0
2971 	 */
2972 	MATH = 1517122664,
2973 	/**
2974 	 * No script set
2975 	 */
2976 	INVALID = 0,
2977 }
2978 alias hb_script_t script_t;
2979 
2980 /**
2981  * Defined by [OpenType Design-Variation Axis Tag Registry](https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg).
2982  *
2983  * Since: 3.0.0
2984  */
2985 public enum hb_style_tag_t
2986 {
2987 	/**
2988 	 * Used to vary between non-italic and italic.
2989 	 * A value of 0 can be interpreted as "Roman" (non-italic); a value of 1 can
2990 	 * be interpreted as (fully) italic.
2991 	 */
2992 	ITALIC = 1769234796,
2993 	/**
2994 	 * Used to vary design to suit different text sizes.
2995 	 * Non-zero. Values can be interpreted as text size, in points.
2996 	 */
2997 	OPTICAL_SIZE = 1869640570,
2998 	/**
2999 	 * Used to vary between upright and slanted text. Values
3000 	 * must be greater than -90 and less than +90. Values can be interpreted as
3001 	 * the angle, in counter-clockwise degrees, of oblique slant from whatever the
3002 	 * designer considers to be upright for that font design. Typical right-leaning
3003 	 * Italic fonts have a negative slant angle (typically around -12)
3004 	 */
3005 	SLANT_ANGLE = 1936486004,
3006 	/**
3007 	 * same as @HB_STYLE_TAG_SLANT_ANGLE expression as ratio.
3008 	 * Typical right-leaning Italic fonts have a positive slant ratio (typically around 0.2)
3009 	 */
3010 	SLANT_RATIO = 1399615092,
3011 	/**
3012 	 * Used to vary width of text from narrower to wider.
3013 	 * Non-zero. Values can be interpreted as a percentage of whatever the font
3014 	 * designer considers “normal width” for that font design.
3015 	 */
3016 	WIDTH = 2003072104,
3017 	/**
3018 	 * Used to vary stroke thicknesses or other design details
3019 	 * to give variation from lighter to blacker. Values can be interpreted in direct
3020 	 * comparison to values for usWeightClass in the OS/2 table,
3021 	 * or the CSS font-weight property.
3022 	 */
3023 	WEIGHT = 2003265652,
3024 }
3025 alias hb_style_tag_t style_tag_t;
3026 
3027 /**
3028  * Data type for the Canonical_Combining_Class (ccc) property
3029  * from the Unicode Character Database.
3030  *
3031  * <note>Note: newer versions of Unicode may add new values.
3032  * Client programs should be ready to handle any value in the 0..254 range
3033  * being returned from hb_unicode_combining_class().</note>
3034  */
3035 public enum hb_unicode_combining_class_t
3036 {
3037 	/**
3038 	 * Spacing and enclosing marks; also many vowel and consonant signs, even if nonspacing
3039 	 */
3040 	NOT_REORDERED = 0,
3041 	/**
3042 	 * Marks which overlay a base letter or symbol
3043 	 */
3044 	OVERLAY = 1,
3045 	/**
3046 	 * Diacritic nukta marks in Brahmi-derived scripts
3047 	 */
3048 	NUKTA = 7,
3049 	/**
3050 	 * Hiragana/Katakana voicing marks
3051 	 */
3052 	KANA_VOICING = 8,
3053 	/**
3054 	 * Viramas
3055 	 */
3056 	VIRAMA = 9,
3057 	/**
3058 	 * [Hebrew]
3059 	 */
3060 	CCC10 = 10,
3061 	/**
3062 	 * [Hebrew]
3063 	 */
3064 	CCC11 = 11,
3065 	/**
3066 	 * [Hebrew]
3067 	 */
3068 	CCC12 = 12,
3069 	/**
3070 	 * [Hebrew]
3071 	 */
3072 	CCC13 = 13,
3073 	/**
3074 	 * [Hebrew]
3075 	 */
3076 	CCC14 = 14,
3077 	/**
3078 	 * [Hebrew]
3079 	 */
3080 	CCC15 = 15,
3081 	/**
3082 	 * [Hebrew]
3083 	 */
3084 	CCC16 = 16,
3085 	/**
3086 	 * [Hebrew]
3087 	 */
3088 	CCC17 = 17,
3089 	/**
3090 	 * [Hebrew]
3091 	 */
3092 	CCC18 = 18,
3093 	/**
3094 	 * [Hebrew]
3095 	 */
3096 	CCC19 = 19,
3097 	/**
3098 	 * [Hebrew]
3099 	 */
3100 	CCC20 = 20,
3101 	/**
3102 	 * [Hebrew]
3103 	 */
3104 	CCC21 = 21,
3105 	/**
3106 	 * [Hebrew]
3107 	 */
3108 	CCC22 = 22,
3109 	/**
3110 	 * [Hebrew]
3111 	 */
3112 	CCC23 = 23,
3113 	/**
3114 	 * [Hebrew]
3115 	 */
3116 	CCC24 = 24,
3117 	/**
3118 	 * [Hebrew]
3119 	 */
3120 	CCC25 = 25,
3121 	/**
3122 	 * [Hebrew]
3123 	 */
3124 	CCC26 = 26,
3125 	/**
3126 	 * [Arabic]
3127 	 */
3128 	CCC27 = 27,
3129 	/**
3130 	 * [Arabic]
3131 	 */
3132 	CCC28 = 28,
3133 	/**
3134 	 * [Arabic]
3135 	 */
3136 	CCC29 = 29,
3137 	/**
3138 	 * [Arabic]
3139 	 */
3140 	CCC30 = 30,
3141 	/**
3142 	 * [Arabic]
3143 	 */
3144 	CCC31 = 31,
3145 	/**
3146 	 * [Arabic]
3147 	 */
3148 	CCC32 = 32,
3149 	/**
3150 	 * [Arabic]
3151 	 */
3152 	CCC33 = 33,
3153 	/**
3154 	 * [Arabic]
3155 	 */
3156 	CCC34 = 34,
3157 	/**
3158 	 * [Arabic]
3159 	 */
3160 	CCC35 = 35,
3161 	/**
3162 	 * [Syriac]
3163 	 */
3164 	CCC36 = 36,
3165 	/**
3166 	 * [Telugu]
3167 	 */
3168 	CCC84 = 84,
3169 	/**
3170 	 * [Telugu]
3171 	 */
3172 	CCC91 = 91,
3173 	/**
3174 	 * [Thai]
3175 	 */
3176 	CCC103 = 103,
3177 	/**
3178 	 * [Thai]
3179 	 */
3180 	CCC107 = 107,
3181 	/**
3182 	 * [Lao]
3183 	 */
3184 	CCC118 = 118,
3185 	/**
3186 	 * [Lao]
3187 	 */
3188 	CCC122 = 122,
3189 	/**
3190 	 * [Tibetan]
3191 	 */
3192 	CCC129 = 129,
3193 	/**
3194 	 * [Tibetan]
3195 	 */
3196 	CCC130 = 130,
3197 	/**
3198 	 * [Tibetan]
3199 	 */
3200 	CCC133 = 132,
3201 	/**
3202 	 * Marks attached at the bottom left
3203 	 */
3204 	ATTACHED_BELOW_LEFT = 200,
3205 	/**
3206 	 * Marks attached directly below
3207 	 */
3208 	ATTACHED_BELOW = 202,
3209 	/**
3210 	 * Marks attached directly above
3211 	 */
3212 	ATTACHED_ABOVE = 214,
3213 	/**
3214 	 * Marks attached at the top right
3215 	 */
3216 	ATTACHED_ABOVE_RIGHT = 216,
3217 	/**
3218 	 * Distinct marks at the bottom left
3219 	 */
3220 	BELOW_LEFT = 218,
3221 	/**
3222 	 * Distinct marks directly below
3223 	 */
3224 	BELOW = 220,
3225 	/**
3226 	 * Distinct marks at the bottom right
3227 	 */
3228 	BELOW_RIGHT = 222,
3229 	/**
3230 	 * Distinct marks to the left
3231 	 */
3232 	LEFT = 224,
3233 	/**
3234 	 * Distinct marks to the right
3235 	 */
3236 	RIGHT = 226,
3237 	/**
3238 	 * Distinct marks at the top left
3239 	 */
3240 	ABOVE_LEFT = 228,
3241 	/**
3242 	 * Distinct marks directly above
3243 	 */
3244 	ABOVE = 230,
3245 	/**
3246 	 * Distinct marks at the top right
3247 	 */
3248 	ABOVE_RIGHT = 232,
3249 	/**
3250 	 * Distinct marks subtending two bases
3251 	 */
3252 	DOUBLE_BELOW = 233,
3253 	/**
3254 	 * Distinct marks extending above two bases
3255 	 */
3256 	DOUBLE_ABOVE = 234,
3257 	/**
3258 	 * Greek iota subscript only
3259 	 */
3260 	IOTA_SUBSCRIPT = 240,
3261 	/**
3262 	 * Invalid combining class
3263 	 */
3264 	INVALID = 255,
3265 }
3266 alias hb_unicode_combining_class_t unicode_combining_class_t;
3267 
3268 /**
3269  * Data type for the "General_Category" (gc) property from
3270  * the Unicode Character Database.
3271  */
3272 public enum hb_unicode_general_category_t
3273 {
3274 	/**
3275 	 * [Cc]
3276 	 */
3277 	CONTROL = 0,
3278 	/**
3279 	 * [Cf]
3280 	 */
3281 	FORMAT = 1,
3282 	/**
3283 	 * [Cn]
3284 	 */
3285 	UNASSIGNED = 2,
3286 	/**
3287 	 * [Co]
3288 	 */
3289 	PRIVATE_USE = 3,
3290 	/**
3291 	 * [Cs]
3292 	 */
3293 	SURROGATE = 4,
3294 	/**
3295 	 * [Ll]
3296 	 */
3297 	LOWERCASE_LETTER = 5,
3298 	/**
3299 	 * [Lm]
3300 	 */
3301 	MODIFIER_LETTER = 6,
3302 	/**
3303 	 * [Lo]
3304 	 */
3305 	OTHER_LETTER = 7,
3306 	/**
3307 	 * [Lt]
3308 	 */
3309 	TITLECASE_LETTER = 8,
3310 	/**
3311 	 * [Lu]
3312 	 */
3313 	UPPERCASE_LETTER = 9,
3314 	/**
3315 	 * [Mc]
3316 	 */
3317 	SPACING_MARK = 10,
3318 	/**
3319 	 * [Me]
3320 	 */
3321 	ENCLOSING_MARK = 11,
3322 	/**
3323 	 * [Mn]
3324 	 */
3325 	NON_SPACING_MARK = 12,
3326 	/**
3327 	 * [Nd]
3328 	 */
3329 	DECIMAL_NUMBER = 13,
3330 	/**
3331 	 * [Nl]
3332 	 */
3333 	LETTER_NUMBER = 14,
3334 	/**
3335 	 * [No]
3336 	 */
3337 	OTHER_NUMBER = 15,
3338 	/**
3339 	 * [Pc]
3340 	 */
3341 	CONNECT_PUNCTUATION = 16,
3342 	/**
3343 	 * [Pd]
3344 	 */
3345 	DASH_PUNCTUATION = 17,
3346 	/**
3347 	 * [Pe]
3348 	 */
3349 	CLOSE_PUNCTUATION = 18,
3350 	/**
3351 	 * [Pf]
3352 	 */
3353 	FINAL_PUNCTUATION = 19,
3354 	/**
3355 	 * [Pi]
3356 	 */
3357 	INITIAL_PUNCTUATION = 20,
3358 	/**
3359 	 * [Po]
3360 	 */
3361 	OTHER_PUNCTUATION = 21,
3362 	/**
3363 	 * [Ps]
3364 	 */
3365 	OPEN_PUNCTUATION = 22,
3366 	/**
3367 	 * [Sc]
3368 	 */
3369 	CURRENCY_SYMBOL = 23,
3370 	/**
3371 	 * [Sk]
3372 	 */
3373 	MODIFIER_SYMBOL = 24,
3374 	/**
3375 	 * [Sm]
3376 	 */
3377 	MATH_SYMBOL = 25,
3378 	/**
3379 	 * [So]
3380 	 */
3381 	OTHER_SYMBOL = 26,
3382 	/**
3383 	 * [Zl]
3384 	 */
3385 	LINE_SEPARATOR = 27,
3386 	/**
3387 	 * [Zp]
3388 	 */
3389 	PARAGRAPH_SEPARATOR = 28,
3390 	/**
3391 	 * [Zs]
3392 	 */
3393 	SPACE_SEPARATOR = 29,
3394 }
3395 alias hb_unicode_general_category_t unicode_general_category_t;
3396 
3397 /**
3398  * Structure representing a setting for an #hb_aat_layout_feature_type_t.
3399  */
3400 struct hb_aat_layout_feature_selector_info_t
3401 {
3402 	/**
3403 	 * The selector's name identifier
3404 	 */
3405 	hb_ot_name_id_t nameId;
3406 	/**
3407 	 * The value to turn the selector on
3408 	 */
3409 	hb_aat_layout_feature_selector_t enable;
3410 	/**
3411 	 * The value to turn the selector off
3412 	 */
3413 	hb_aat_layout_feature_selector_t disable;
3414 	uint reserved;
3415 }
3416 
3417 /**
3418  * Data type for blobs. A blob wraps a chunk of binary
3419  * data and facilitates its lifecycle management between
3420  * a client program and HarfBuzz.
3421  */
3422 struct hb_blob_t;
3423 
3424 /**
3425  * The main structure holding the input text and its properties before shaping,
3426  * and output glyphs and their information after shaping.
3427  */
3428 struct hb_buffer_t;
3429 
3430 /**
3431  * Glyph draw callbacks.
3432  *
3433  * #hb_draw_move_to_func_t, #hb_draw_line_to_func_t and
3434  * #hb_draw_cubic_to_func_t calls are necessary to be defined but we translate
3435  * #hb_draw_quadratic_to_func_t calls to #hb_draw_cubic_to_func_t if the
3436  * callback isn't defined.
3437  *
3438  * Since: 4.0.0
3439  */
3440 struct hb_draw_funcs_t;
3441 
3442 /**
3443  * Current drawing state.
3444  *
3445  * Since: 4.0.0
3446  */
3447 struct hb_draw_state_t
3448 {
3449 	/**
3450 	 * Whether there is an open path
3451 	 */
3452 	hb_bool_t pathOpen;
3453 	/**
3454 	 * X component of the start of current path
3455 	 */
3456 	float pathStartX;
3457 	/**
3458 	 * Y component of the start of current path
3459 	 */
3460 	float pathStartY;
3461 	/**
3462 	 * X component of current point
3463 	 */
3464 	float currentX;
3465 	/**
3466 	 * Y component of current point
3467 	 */
3468 	float currentY;
3469 	hb_var_num_t reserved1;
3470 	hb_var_num_t reserved2;
3471 	hb_var_num_t reserved3;
3472 	hb_var_num_t reserved4;
3473 	hb_var_num_t reserved5;
3474 	hb_var_num_t reserved6;
3475 	hb_var_num_t reserved7;
3476 }
3477 
3478 /**
3479  * Data type for holding font faces.
3480  */
3481 struct hb_face_t;
3482 
3483 struct hb_feature_t
3484 {
3485 	/**
3486 	 * The #hb_tag_t tag of the feature
3487 	 */
3488 	hb_tag_t tag;
3489 	/**
3490 	 * The value of the feature. 0 disables the feature, non-zero (usually
3491 	 * 1) enables the feature.  For features implemented as lookup type 3 (like
3492 	 * 'salt') the @value is a one based index into the alternates.
3493 	 */
3494 	uint value;
3495 	/**
3496 	 * the cluster to start applying this feature setting (inclusive).
3497 	 */
3498 	uint start;
3499 	/**
3500 	 * the cluster to end applying this feature setting (exclusive).
3501 	 */
3502 	uint end;
3503 }
3504 
3505 /**
3506  * Font-wide extent values, measured in font units.
3507  *
3508  * Note that typically @ascender is positive and @descender
3509  * negative, in coordinate systems that grow up.
3510  */
3511 struct hb_font_extents_t
3512 {
3513 	/**
3514 	 * The height of typographic ascenders.
3515 	 */
3516 	hb_position_t ascender;
3517 	/**
3518 	 * The depth of typographic descenders.
3519 	 */
3520 	hb_position_t descender;
3521 	/**
3522 	 * The suggested line-spacing gap.
3523 	 */
3524 	hb_position_t lineGap;
3525 	hb_position_t reserved9;
3526 	hb_position_t reserved8;
3527 	hb_position_t reserved7;
3528 	hb_position_t reserved6;
3529 	hb_position_t reserved5;
3530 	hb_position_t reserved4;
3531 	hb_position_t reserved3;
3532 	hb_position_t reserved2;
3533 	hb_position_t reserved1;
3534 }
3535 
3536 /**
3537  * Data type containing a set of virtual methods used for
3538  * working on #hb_font_t font objects.
3539  *
3540  * HarfBuzz provides a lightweight default function for each of
3541  * the methods in #hb_font_funcs_t. Client programs can implement
3542  * their own replacements for the individual font functions, as
3543  * needed, and replace the default by calling the setter for a
3544  * method.
3545  */
3546 struct hb_font_funcs_t;
3547 
3548 /**
3549  * Data type for holding fonts.
3550  */
3551 struct hb_font_t;
3552 
3553 /**
3554  * Glyph extent values, measured in font units.
3555  *
3556  * Note that @height is negative, in coordinate systems that grow up.
3557  */
3558 struct hb_glyph_extents_t
3559 {
3560 	/**
3561 	 * Distance from the x-origin to the left extremum of the glyph.
3562 	 */
3563 	hb_position_t xBearing;
3564 	/**
3565 	 * Distance from the top extremum of the glyph to the y-origin.
3566 	 */
3567 	hb_position_t yBearing;
3568 	/**
3569 	 * Distance from the left extremum of the glyph to the right extremum.
3570 	 */
3571 	hb_position_t width;
3572 	/**
3573 	 * Distance from the top extremum of the glyph to the bottom extremum.
3574 	 */
3575 	hb_position_t height;
3576 }
3577 
3578 /**
3579  * The #hb_glyph_info_t is the structure that holds information about the
3580  * glyphs and their relation to input text.
3581  */
3582 struct hb_glyph_info_t
3583 {
3584 	/**
3585 	 * either a Unicode code point (before shaping) or a glyph index
3586 	 * (after shaping).
3587 	 */
3588 	hb_codepoint_t codepoint;
3589 	hb_mask_t mask;
3590 	/**
3591 	 * the index of the character in the original text that corresponds
3592 	 * to this #hb_glyph_info_t, or whatever the client passes to
3593 	 * hb_buffer_add(). More than one #hb_glyph_info_t can have the same
3594 	 * @cluster value, if they resulted from the same character (e.g. one
3595 	 * to many glyph substitution), and when more than one character gets
3596 	 * merged in the same glyph (e.g. many to one glyph substitution) the
3597 	 * #hb_glyph_info_t will have the smallest cluster value of them.
3598 	 * By default some characters are merged into the same cluster
3599 	 * (e.g. combining marks have the same cluster as their bases)
3600 	 * even if they are separate glyphs, hb_buffer_set_cluster_level()
3601 	 * allow selecting more fine-grained cluster handling.
3602 	 */
3603 	uint cluster;
3604 	hb_var_int_t var1;
3605 	hb_var_int_t var2;
3606 }
3607 
3608 /**
3609  * The #hb_glyph_position_t is the structure that holds the positions of the
3610  * glyph in both horizontal and vertical directions. All positions in
3611  * #hb_glyph_position_t are relative to the current point.
3612  */
3613 struct hb_glyph_position_t
3614 {
3615 	/**
3616 	 * how much the line advances after drawing this glyph when setting
3617 	 * text in horizontal direction.
3618 	 */
3619 	hb_position_t xAdvance;
3620 	/**
3621 	 * how much the line advances after drawing this glyph when setting
3622 	 * text in vertical direction.
3623 	 */
3624 	hb_position_t yAdvance;
3625 	/**
3626 	 * how much the glyph moves on the X-axis before drawing it, this
3627 	 * should not affect how much the line advances.
3628 	 */
3629 	hb_position_t xOffset;
3630 	/**
3631 	 * how much the glyph moves on the Y-axis before drawing it, this
3632 	 * should not affect how much the line advances.
3633 	 */
3634 	hb_position_t yOffset;
3635 	hb_var_int_t var;
3636 }
3637 
3638 /**
3639  * Data type for holding integer-to-integer hash maps.
3640  */
3641 struct hb_map_t;
3642 
3643 /**
3644  * Pairs of glyph and color index.
3645  *
3646  * Since: 2.1.0
3647  */
3648 struct hb_ot_color_layer_t
3649 {
3650 	/**
3651 	 * the glyph ID of the layer
3652 	 */
3653 	hb_codepoint_t glyph;
3654 	/**
3655 	 * the palette color index of the layer
3656 	 */
3657 	uint colorIndex;
3658 }
3659 
3660 /**
3661  * Data type to hold information for a "part" component of a math-variant glyph.
3662  * Large variants for stretchable math glyphs (such as parentheses) can be constructed
3663  * on the fly from parts.
3664  *
3665  * Since: 1.3.3
3666  */
3667 struct hb_ot_math_glyph_part_t
3668 {
3669 	/**
3670 	 * The glyph index of the variant part
3671 	 */
3672 	hb_codepoint_t glyph;
3673 	/**
3674 	 * The length of the connector on the starting side of the variant part
3675 	 */
3676 	hb_position_t startConnectorLength;
3677 	/**
3678 	 * The length of the connector on the ending side of the variant part
3679 	 */
3680 	hb_position_t endConnectorLength;
3681 	/**
3682 	 * The total advance of the part
3683 	 */
3684 	hb_position_t fullAdvance;
3685 	/**
3686 	 * #hb_ot_math_glyph_part_flags_t flags for the part
3687 	 */
3688 	hb_ot_math_glyph_part_flags_t flags;
3689 }
3690 
3691 /**
3692  * Data type to hold math-variant information for a glyph.
3693  *
3694  * Since: 1.3.3
3695  */
3696 struct hb_ot_math_glyph_variant_t
3697 {
3698 	/**
3699 	 * The glyph index of the variant
3700 	 */
3701 	hb_codepoint_t glyph;
3702 	/**
3703 	 * The advance width of the variant
3704 	 */
3705 	hb_position_t advance;
3706 }
3707 
3708 /**
3709  * Data type to hold math kerning (cut-in) information for a glyph.
3710  *
3711  * Since: 3.4.0
3712  */
3713 struct hb_ot_math_kern_entry_t
3714 {
3715 	/**
3716 	 * The maximum height at which this entry should be used
3717 	 */
3718 	hb_position_t maxCorrectionHeight;
3719 	/**
3720 	 * The kern value of the entry
3721 	 */
3722 	hb_position_t kernValue;
3723 }
3724 
3725 /**
3726  * Structure representing a name ID in a particular language.
3727  *
3728  * Since: 2.1.0
3729  */
3730 struct hb_ot_name_entry_t
3731 {
3732 	/**
3733 	 * name ID
3734 	 */
3735 	hb_ot_name_id_t nameId;
3736 	hb_var_int_t var;
3737 	/**
3738 	 * language
3739 	 */
3740 	hb_language_t language;
3741 }
3742 
3743 /**
3744  * Data type for holding variation-axis values.
3745  *
3746  * The minimum, default, and maximum values are in un-normalized, user scales.
3747  *
3748  * <note>Note: at present, the only flag defined for @flags is
3749  * #HB_OT_VAR_AXIS_FLAG_HIDDEN.</note>
3750  *
3751  * Since: 2.2.0
3752  */
3753 struct hb_ot_var_axis_info_t
3754 {
3755 	/**
3756 	 * Index of the axis in the variation-axis array
3757 	 */
3758 	uint axisIndex;
3759 	/**
3760 	 * The #hb_tag_t tag identifying the design variation of the axis
3761 	 */
3762 	hb_tag_t tag;
3763 	/**
3764 	 * The `name` table Name ID that provides display names for the axis
3765 	 */
3766 	hb_ot_name_id_t nameId;
3767 	/**
3768 	 * The #hb_ot_var_axis_flags_t flags for the axis
3769 	 */
3770 	hb_ot_var_axis_flags_t flags;
3771 	/**
3772 	 * The minimum value on the variation axis that the font covers
3773 	 */
3774 	float minValue;
3775 	/**
3776 	 * The position on the variation axis corresponding to the font's defaults
3777 	 */
3778 	float defaultValue;
3779 	/**
3780 	 * The maximum value on the variation axis that the font covers
3781 	 */
3782 	float maxValue;
3783 	uint reserved;
3784 }
3785 
3786 /**
3787  * Use #hb_ot_var_axis_info_t instead.
3788  *
3789  * Since: 1.4.2
3790  */
3791 struct hb_ot_var_axis_t
3792 {
3793 	/**
3794 	 * axis tag
3795 	 */
3796 	hb_tag_t tag;
3797 	/**
3798 	 * axis name identifier
3799 	 */
3800 	hb_ot_name_id_t nameId;
3801 	/**
3802 	 * minimum value of the axis
3803 	 */
3804 	float minValue;
3805 	/**
3806 	 * default value of the axis
3807 	 */
3808 	float defaultValue;
3809 	/**
3810 	 * maximum value of the axis
3811 	 */
3812 	float maxValue;
3813 }
3814 
3815 /**
3816  * The structure that holds various text properties of an #hb_buffer_t. Can be
3817  * set and retrieved using hb_buffer_set_segment_properties() and
3818  * hb_buffer_get_segment_properties(), respectively.
3819  */
3820 struct hb_segment_properties_t
3821 {
3822 	/**
3823 	 * the #hb_direction_t of the buffer, see hb_buffer_set_direction().
3824 	 */
3825 	hb_direction_t direction;
3826 	/**
3827 	 * the #hb_script_t of the buffer, see hb_buffer_set_script().
3828 	 */
3829 	hb_script_t script;
3830 	/**
3831 	 * the #hb_language_t of the buffer, see hb_buffer_set_language().
3832 	 */
3833 	hb_language_t language;
3834 	void* reserved1;
3835 	void* reserved2;
3836 }
3837 
3838 /**
3839  * Data type for holding a set of integers. #hb_set_t's are
3840  * used to gather and contain glyph IDs, Unicode code
3841  * points, and various other collections of discrete
3842  * values.
3843  */
3844 struct hb_set_t;
3845 
3846 /**
3847  * Data type for holding a shaping plan.
3848  *
3849  * Shape plans contain information about how HarfBuzz will shape a
3850  * particular text segment, based on the segment's properties and the
3851  * capabilities in the font face in use.
3852  *
3853  * Shape plans can be queried about how shaping will perform, given a set
3854  * of specific input parameters (script, language, direction, features,
3855  * etc.).
3856  */
3857 struct hb_shape_plan_t;
3858 
3859 /**
3860  * Data type containing a set of virtual methods used for
3861  * accessing various Unicode character properties.
3862  *
3863  * HarfBuzz provides a default function for each of the
3864  * methods in #hb_unicode_funcs_t. Client programs can implement
3865  * their own replacements for the individual Unicode functions, as
3866  * needed, and replace the default by calling the setter for a
3867  * method.
3868  */
3869 struct hb_unicode_funcs_t;
3870 
3871 /**
3872  * Data structure for holding user-data keys.
3873  */
3874 struct hb_user_data_key_t
3875 {
3876 	char unused;
3877 }
3878 
3879 struct hb_var_int_t
3880 {
3881 	union
3882 	{
3883 		uint u32;
3884 		int i32;
3885 		ushort[2] u16;
3886 		short[2] i16;
3887 		ubyte[4] u8;
3888 		byte[4] i8;
3889 	}
3890 }
3891 
3892 struct hb_var_num_t
3893 {
3894 	union
3895 	{
3896 		float f;
3897 		uint u32;
3898 		int i32;
3899 		ushort[2] u16;
3900 		short[2] i16;
3901 		ubyte[4] u8;
3902 		byte[4] i8;
3903 	}
3904 }
3905 
3906 struct hb_variation_t
3907 {
3908 	/**
3909 	 * The #hb_tag_t tag of the variation-axis name
3910 	 */
3911 	hb_tag_t tag;
3912 	/**
3913 	 * The value of the variation axis
3914 	 */
3915 	float value;
3916 }
3917 
3918 /**
3919  * A callback method for #hb_buffer_t. The method gets called with the
3920  * #hb_buffer_t it was set on, the #hb_font_t the buffer is shaped with and a
3921  * message describing what step of the shaping process will be performed.
3922  * Returning %false from this method will skip this shaping step and move to
3923  * the next one.
3924  *
3925  * Params:
3926  *     buffer = An #hb_buffer_t to work upon
3927  *     font = The #hb_font_t the @buffer is shaped with
3928  *     message = %NULL-terminated message passed to the function
3929  *     userData = User data pointer passed by the caller
3930  *
3931  * Returns: %true to perform the shaping step, %false to skip it.
3932  *
3933  * Since: 1.1.3
3934  */
3935 public alias extern(C) hb_bool_t function(hb_buffer_t* buffer, hb_font_t* font, const(char)* message, void* userData) hb_buffer_message_func_t;
3936 
3937 /**
3938  * A virtual method for destroy user-data callbacks.
3939  *
3940  * Params:
3941  *     userData = the data to be destroyed
3942  */
3943 public alias extern(C) void function(void* userData) hb_destroy_func_t;
3944 
3945 /**
3946  * A virtual method for the #hb_draw_funcs_t to perform a "close-path" draw
3947  * operation.
3948  *
3949  * Params:
3950  *     dfuncs = draw functions object
3951  *     drawData = The data accompanying the draw functions
3952  *     st = current draw state
3953  *     userData = User data pointer passed by the caller
3954  *
3955  * Since: 4.0.0
3956  */
3957 public alias extern(C) void function(hb_draw_funcs_t* dfuncs, void* drawData, hb_draw_state_t* st, void* userData) hb_draw_close_path_func_t;
3958 
3959 /**
3960  * A virtual method for the #hb_draw_funcs_t to perform a "cubic-to" draw
3961  * operation.
3962  *
3963  * Params:
3964  *     dfuncs = draw functions object
3965  *     drawData = The data accompanying the draw functions
3966  *     st = current draw state
3967  *     control1X = X component of first control point
3968  *     control1Y = Y component of first control point
3969  *     control2X = X component of second control point
3970  *     control2Y = Y component of second control point
3971  *     toX = X component of target point
3972  *     toY = Y component of target point
3973  *     userData = User data pointer passed by the caller
3974  *
3975  * Since: 4.0.0
3976  */
3977 public alias extern(C) void function(hb_draw_funcs_t* dfuncs, void* drawData, hb_draw_state_t* st, float control1X, float control1Y, float control2X, float control2Y, float toX, float toY, void* userData) hb_draw_cubic_to_func_t;
3978 
3979 /**
3980  * A virtual method for the #hb_draw_funcs_t to perform a "line-to" draw
3981  * operation.
3982  *
3983  * Params:
3984  *     dfuncs = draw functions object
3985  *     drawData = The data accompanying the draw functions
3986  *     st = current draw state
3987  *     toX = X component of target point
3988  *     toY = Y component of target point
3989  *     userData = User data pointer passed by the caller
3990  *
3991  * Since: 4.0.0
3992  */
3993 public alias extern(C) void function(hb_draw_funcs_t* dfuncs, void* drawData, hb_draw_state_t* st, float toX, float toY, void* userData) hb_draw_line_to_func_t;
3994 
3995 /**
3996  * A virtual method for the #hb_draw_funcs_t to perform a "move-to" draw
3997  * operation.
3998  *
3999  * Params:
4000  *     dfuncs = draw functions object
4001  *     drawData = The data accompanying the draw functions
4002  *     st = current draw state
4003  *     toX = X component of target point
4004  *     toY = Y component of target point
4005  *     userData = User data pointer passed by the caller
4006  *
4007  * Since: 4.0.0
4008  */
4009 public alias extern(C) void function(hb_draw_funcs_t* dfuncs, void* drawData, hb_draw_state_t* st, float toX, float toY, void* userData) hb_draw_move_to_func_t;
4010 
4011 /**
4012  * A virtual method for the #hb_draw_funcs_t to perform a "quadratic-to" draw
4013  * operation.
4014  *
4015  * Params:
4016  *     dfuncs = draw functions object
4017  *     drawData = The data accompanying the draw functions
4018  *     st = current draw state
4019  *     controlX = X component of control point
4020  *     controlY = Y component of control point
4021  *     toX = X component of target point
4022  *     toY = Y component of target point
4023  *     userData = User data pointer passed by the caller
4024  *
4025  * Since: 4.0.0
4026  */
4027 public alias extern(C) void function(hb_draw_funcs_t* dfuncs, void* drawData, hb_draw_state_t* st, float controlX, float controlY, float toX, float toY, void* userData) hb_draw_quadratic_to_func_t;
4028 
4029 /**
4030  * This method should retrieve the extents for a font.
4031  *
4032  * Params:
4033  *     font = #hb_font_t to work upon
4034  *     fontData = @font user data pointer
4035  *     extents = The font extents retrieved
4036  *     userData = User data pointer passed by the caller
4037  */
4038 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_font_extents_t* extents, void* userData) hb_font_get_font_extents_func_t;
4039 
4040 /**
4041  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4042  *
4043  * This method should retrieve the advance for a specified glyph. The
4044  * method must return an #hb_position_t.
4045  *
4046  * Params:
4047  *     font = #hb_font_t to work upon
4048  *     fontData = @font user data pointer
4049  *     glyph = The glyph ID to query
4050  *     userData = User data pointer passed by the caller
4051  *
4052  * Returns: The advance of @glyph within @font
4053  */
4054 public alias extern(C) hb_position_t function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, void* userData) hb_font_get_glyph_advance_func_t;
4055 
4056 /**
4057  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4058  *
4059  * This method should retrieve the advances for a sequence of glyphs.
4060  *
4061  * Params:
4062  *     font = #hb_font_t to work upon
4063  *     fontData = @font user data pointer
4064  *     count = The number of glyph IDs in the sequence queried
4065  *     firstGlyph = The first glyph ID to query
4066  *     glyphStride = The stride between successive glyph IDs
4067  *     firstAdvance = The first advance retrieved
4068  *     advanceStride = The stride between successive advances
4069  *     userData = User data pointer passed by the caller
4070  */
4071 public alias extern(C) void function(hb_font_t* font, void* fontData, uint count, hb_codepoint_t* firstGlyph, uint glyphStride, hb_position_t* firstAdvance, uint advanceStride, void* userData) hb_font_get_glyph_advances_func_t;
4072 
4073 /**
4074  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4075  *
4076  * This method should retrieve the (X,Y) coordinates (in font units) for a
4077  * specified contour point in a glyph. Each coordinate must be returned as
4078  * an #hb_position_t output parameter.
4079  *
4080  * Params:
4081  *     font = #hb_font_t to work upon
4082  *     fontData = @font user data pointer
4083  *     glyph = The glyph ID to query
4084  *     pointIndex = The contour-point index to query
4085  *     x = The X value retrieved for the contour point
4086  *     y = The Y value retrieved for the contour point
4087  *     userData = User data pointer passed by the caller
4088  *
4089  * Returns: %true if data found, %false otherwise
4090  */
4091 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, uint pointIndex, hb_position_t* x, hb_position_t* y, void* userData) hb_font_get_glyph_contour_point_func_t;
4092 
4093 /**
4094  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4095  *
4096  * This method should retrieve the extents for a specified glyph. Extents must be
4097  * returned in an #hb_glyph_extents output parameter.
4098  *
4099  * Params:
4100  *     font = #hb_font_t to work upon
4101  *     fontData = @font user data pointer
4102  *     glyph = The glyph ID to query
4103  *     extents = The #hb_glyph_extents_t retrieved
4104  *     userData = User data pointer passed by the caller
4105  *
4106  * Returns: %true if data found, %false otherwise
4107  */
4108 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, hb_glyph_extents_t* extents, void* userData) hb_font_get_glyph_extents_func_t;
4109 
4110 /**
4111  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4112  *
4113  * This method should retrieve the glyph ID that corresponds to a glyph-name
4114  * string.
4115  *
4116  * Params:
4117  *     font = #hb_font_t to work upon
4118  *     fontData = @font user data pointer
4119  *     name = The name string to query
4120  *     len = The length of the name queried
4121  *     glyph = The glyph ID retrieved
4122  *     userData = User data pointer passed by the caller
4123  *
4124  * Returns: %true if data found, %false otherwise
4125  */
4126 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, char* name, int len, hb_codepoint_t* glyph, void* userData) hb_font_get_glyph_from_name_func_t;
4127 
4128 /**
4129  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4130  *
4131  * This method should retrieve the glyph ID for a specified Unicode code point
4132  * font, with an optional variation selector.
4133  *
4134  * Params:
4135  *     font = #hb_font_t to work upon
4136  *     fontData = @font user data pointer
4137  *     unicode = The Unicode code point to query
4138  *     variationSelector = The  variation-selector code point to query
4139  *     glyph = The glyph ID retrieved
4140  *     userData = User data pointer passed by the caller
4141  *
4142  * Returns: %true if data found, %false otherwise
4143  */
4144 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t unicode, hb_codepoint_t variationSelector, hb_codepoint_t* glyph, void* userData) hb_font_get_glyph_func_t;
4145 
4146 /**
4147  * This method should retrieve the kerning-adjustment value for a glyph-pair in
4148  * the specified font, for horizontal text segments.
4149  *
4150  * Params:
4151  *     font = #hb_font_t to work upon
4152  *     fontData = @font user data pointer
4153  *     firstGlyph = The glyph ID of the first glyph in the glyph pair
4154  *     secondGlyph = The glyph ID of the second glyph in the glyph pair
4155  *     userData = User data pointer passed by the caller
4156  */
4157 public alias extern(C) hb_position_t function(hb_font_t* font, void* fontData, hb_codepoint_t firstGlyph, hb_codepoint_t secondGlyph, void* userData) hb_font_get_glyph_kerning_func_t;
4158 
4159 /**
4160  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4161  *
4162  * This method should retrieve the glyph name that corresponds to a
4163  * glyph ID. The name should be returned in a string output parameter.
4164  *
4165  * Params:
4166  *     font = #hb_font_t to work upon
4167  *     fontData = @font user data pointer
4168  *     glyph = The glyph ID to query
4169  *     name = Name string retrieved for the glyph ID
4170  *     size = Length of the glyph-name string retrieved
4171  *     userData = User data pointer passed by the caller
4172  *
4173  * Returns: %true if data found, %false otherwise
4174  */
4175 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, char* name, uint size, void* userData) hb_font_get_glyph_name_func_t;
4176 
4177 /**
4178  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4179  *
4180  * This method should retrieve the (X,Y) coordinates (in font units) of the
4181  * origin for a glyph. Each coordinate must be returned in an #hb_position_t
4182  * output parameter.
4183  *
4184  * Params:
4185  *     font = #hb_font_t to work upon
4186  *     fontData = @font user data pointer
4187  *     glyph = The glyph ID to query
4188  *     x = The X coordinate of the origin
4189  *     y = The Y coordinate of the origin
4190  *     userData = User data pointer passed by the caller
4191  *
4192  * Returns: %true if data found, %false otherwise
4193  */
4194 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, hb_position_t* x, hb_position_t* y, void* userData) hb_font_get_glyph_origin_func_t;
4195 
4196 /**
4197  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4198  *
4199  * Params:
4200  *     font = #hb_font_t to work upon
4201  *     fontData = @font user data pointer
4202  *     glyph = The glyph ID to query
4203  *     drawFuncs = The draw functions to send the shape data to
4204  *     drawData = The data accompanying the draw functions
4205  *     userData = User data pointer passed by the caller
4206  *
4207  * Since: 4.0.0
4208  */
4209 public alias extern(C) void function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, hb_draw_funcs_t* drawFuncs, void* drawData, void* userData) hb_font_get_glyph_shape_func_t;
4210 
4211 /**
4212  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4213  *
4214  * This method should retrieve the nominal glyph ID for a specified Unicode code
4215  * point. Glyph IDs must be returned in a #hb_codepoint_t output parameter.
4216  *
4217  * Params:
4218  *     font = #hb_font_t to work upon
4219  *     fontData = @font user data pointer
4220  *     unicode = The Unicode code point to query
4221  *     glyph = The glyph ID retrieved
4222  *     userData = User data pointer passed by the caller
4223  *
4224  * Returns: %true if data found, %false otherwise
4225  */
4226 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t unicode, hb_codepoint_t* glyph, void* userData) hb_font_get_nominal_glyph_func_t;
4227 
4228 /**
4229  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4230  *
4231  * This method should retrieve the nominal glyph IDs for a sequence of
4232  * Unicode code points. Glyph IDs must be returned in a #hb_codepoint_t
4233  * output parameter.
4234  *
4235  * Params:
4236  *     font = #hb_font_t to work upon
4237  *     fontData = @font user data pointer
4238  *     count = number of code points to query
4239  *     firstUnicode = The first Unicode code point to query
4240  *     unicodeStride = The stride between successive code points
4241  *     firstGlyph = The first glyph ID retrieved
4242  *     glyphStride = The stride between successive glyph IDs
4243  *     userData = User data pointer passed by the caller
4244  *
4245  * Returns: the number of code points processed
4246  */
4247 public alias extern(C) uint function(hb_font_t* font, void* fontData, uint count, hb_codepoint_t* firstUnicode, uint unicodeStride, hb_codepoint_t* firstGlyph, uint glyphStride, void* userData) hb_font_get_nominal_glyphs_func_t;
4248 
4249 /**
4250  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
4251  *
4252  * This method should retrieve the glyph ID for a specified Unicode code point
4253  * followed by a specified Variation Selector code point. Glyph IDs must be
4254  * returned in a #hb_codepoint_t output parameter.
4255  *
4256  * Params:
4257  *     font = #hb_font_t to work upon
4258  *     fontData = @font user data pointer
4259  *     unicode = The Unicode code point to query
4260  *     variationSelector = The  variation-selector code point to query
4261  *     glyph = The glyph ID retrieved
4262  *     userData = User data pointer passed by the caller
4263  *
4264  * Returns: %true if data found, %false otherwise
4265  */
4266 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t unicode, hb_codepoint_t variationSelector, hb_codepoint_t* glyph, void* userData) hb_font_get_variation_glyph_func_t;
4267 
4268 /**
4269  * Callback function for hb_face_create_for_tables().
4270  *
4271  * Params:
4272  *     face = an #hb_face_t to reference table for
4273  *     tag = the tag of the table to reference
4274  *     userData = User data pointer passed by the caller
4275  *
4276  * Returns: A pointer to the @tag table within @face
4277  *
4278  * Since: 0.9.2
4279  */
4280 public alias extern(C) hb_blob_t* function(hb_face_t* face, hb_tag_t tag, void* userData) hb_reference_table_func_t;
4281 
4282 /**
4283  * A virtual method for the #hb_unicode_funcs_t structure.
4284  *
4285  * This method should retrieve the Canonical Combining Class (ccc)
4286  * property for a specified Unicode code point.
4287  *
4288  * Params:
4289  *     ufuncs = A Unicode-functions structure
4290  *     unicode = The code point to query
4291  *     userData = User data pointer passed by the caller
4292  *
4293  * Returns: The #hb_unicode_combining_class_t of @unicode
4294  */
4295 public alias extern(C) hb_unicode_combining_class_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t unicode, void* userData) hb_unicode_combining_class_func_t;
4296 
4297 /**
4298  * A virtual method for the #hb_unicode_funcs_t structure.
4299  *
4300  * This method should compose a sequence of two input Unicode code
4301  * points by canonical equivalence, returning the composed code
4302  * point in a #hb_codepoint_t output parameter (if successful).
4303  * The method must return an #hb_bool_t indicating the success
4304  * of the composition.
4305  *
4306  * Params:
4307  *     ufuncs = A Unicode-functions structure
4308  *     a = The first code point to compose
4309  *     b = The second code point to compose
4310  *     ab = The composed code point
4311  *     userData = user data pointer passed by the caller
4312  *
4313  * Returns: %true is @a,@b composed, %false otherwise
4314  */
4315 public alias extern(C) hb_bool_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t a, hb_codepoint_t b, hb_codepoint_t* ab, void* userData) hb_unicode_compose_func_t;
4316 
4317 /**
4318  * Fully decompose @u to its Unicode compatibility decomposition. The codepoints of the decomposition will be written to @decomposed.
4319  * The complete length of the decomposition will be returned.
4320  *
4321  * If @u has no compatibility decomposition, zero should be returned.
4322  *
4323  * The Unicode standard guarantees that a buffer of length #HB_UNICODE_MAX_DECOMPOSITION_LEN codepoints will always be sufficient for any
4324  * compatibility decomposition plus an terminating value of 0.  Consequently, @decompose must be allocated by the caller to be at least this length.  Implementations
4325  * of this function type must ensure that they do not write past the provided array.
4326  *
4327  * Params:
4328  *     ufuncs = a Unicode function structure
4329  *     u = codepoint to decompose
4330  *     decomposed = address of codepoint array (of length #HB_UNICODE_MAX_DECOMPOSITION_LEN) to write decomposition into
4331  *     userData = user data pointer as passed to hb_unicode_funcs_set_decompose_compatibility_func()
4332  *
4333  * Returns: number of codepoints in the full compatibility decomposition of @u, or 0 if no decomposition available.
4334  */
4335 public alias extern(C) uint function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t u, hb_codepoint_t* decomposed, void* userData) hb_unicode_decompose_compatibility_func_t;
4336 
4337 /**
4338  * A virtual method for the #hb_unicode_funcs_t structure.
4339  *
4340  * This method should decompose an input Unicode code point,
4341  * returning the two decomposed code points in #hb_codepoint_t
4342  * output parameters (if successful). The method must return an
4343  * #hb_bool_t indicating the success of the composition.
4344  *
4345  * Params:
4346  *     ufuncs = A Unicode-functions structure
4347  *     ab = The code point to decompose
4348  *     a = The first decomposed code point
4349  *     b = The second decomposed code point
4350  *     userData = user data pointer passed by the caller
4351  *
4352  * Returns: %true if @ab decomposed, %false otherwise
4353  */
4354 public alias extern(C) hb_bool_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t ab, hb_codepoint_t* a, hb_codepoint_t* b, void* userData) hb_unicode_decompose_func_t;
4355 
4356 /**
4357  * A virtual method for the #hb_unicode_funcs_t structure.
4358  *
4359  * Params:
4360  *     ufuncs = A Unicode-functions structure
4361  *     unicode = The code point to query
4362  *     userData = User data pointer passed by the caller
4363  */
4364 public alias extern(C) uint function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t unicode, void* userData) hb_unicode_eastasian_width_func_t;
4365 
4366 /**
4367  * A virtual method for the #hb_unicode_funcs_t structure.
4368  *
4369  * This method should retrieve the General Category property for
4370  * a specified Unicode code point.
4371  *
4372  * Params:
4373  *     ufuncs = A Unicode-functions structure
4374  *     unicode = The code point to query
4375  *     userData = User data pointer passed by the caller
4376  *
4377  * Returns: The #hb_unicode_general_category_t of @unicode
4378  */
4379 public alias extern(C) hb_unicode_general_category_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t unicode, void* userData) hb_unicode_general_category_func_t;
4380 
4381 /**
4382  * A virtual method for the #hb_unicode_funcs_t structure.
4383  *
4384  * This method should retrieve the Bi-Directional Mirroring Glyph
4385  * code point for a specified Unicode code point.
4386  *
4387  * <note>Note: If a code point does not have a specified
4388  * Bi-Directional Mirroring Glyph defined, the method should
4389  * return the original code point.</note>
4390  *
4391  * Params:
4392  *     ufuncs = A Unicode-functions structure
4393  *     unicode = The code point to query
4394  *     userData = User data pointer passed by the caller
4395  *
4396  * Returns: The #hb_codepoint_t of the Mirroring Glyph for @unicode
4397  */
4398 public alias extern(C) hb_codepoint_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t unicode, void* userData) hb_unicode_mirroring_func_t;
4399 
4400 /**
4401  * A virtual method for the #hb_unicode_funcs_t structure.
4402  *
4403  * This method should retrieve the Script property for a
4404  * specified Unicode code point.
4405  *
4406  * Params:
4407  *     ufuncs = A Unicode-functions structure
4408  *     unicode = The code point to query
4409  *     userData = User data pointer passed by the caller
4410  *
4411  * Returns: The #hb_script_t of @unicode
4412  */
4413 public alias extern(C) hb_script_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t unicode, void* userData) hb_unicode_script_func_t;
4414 
4415 /**
4416  * Used when getting or setting AAT feature selectors. Indicates that
4417  * there is no selector index corresponding to the selector of interest.
4418  */
4419 enum AAT_LAYOUT_NO_SELECTOR_INDEX = 65535;
4420 alias HB_AAT_LAYOUT_NO_SELECTOR_INDEX = AAT_LAYOUT_NO_SELECTOR_INDEX;
4421 
4422 /**
4423  * The default code point for replacing invalid characters in a given encoding.
4424  * Set to U+FFFD REPLACEMENT CHARACTER.
4425  */
4426 enum BUFFER_REPLACEMENT_CODEPOINT_DEFAULT = 65533;
4427 alias HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT = BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
4428 
4429 /**
4430  * Special setting for #hb_feature_t.start to apply the feature from the start
4431  * of the buffer.
4432  */
4433 enum FEATURE_GLOBAL_START = 0;
4434 alias HB_FEATURE_GLOBAL_START = FEATURE_GLOBAL_START;
4435 
4436 /**
4437  * An unset #hb_language_t.
4438  */
4439 enum LANGUAGE_INVALID = 0;
4440 alias HB_LANGUAGE_INVALID = LANGUAGE_INVALID;
4441 
4442 /**
4443  * Unset #hb_map_t value.
4444  */
4445 enum MAP_VALUE_INVALID = 4294967295;
4446 alias HB_MAP_VALUE_INVALID = MAP_VALUE_INVALID;
4447 
4448 /**
4449  * Special value for language index indicating default or unsupported language.
4450  */
4451 enum OT_LAYOUT_DEFAULT_LANGUAGE_INDEX = 65535;
4452 alias HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX = OT_LAYOUT_DEFAULT_LANGUAGE_INDEX;
4453 
4454 /**
4455  * Special value for feature index indicating unsupported feature.
4456  */
4457 enum OT_LAYOUT_NO_FEATURE_INDEX = 65535;
4458 alias HB_OT_LAYOUT_NO_FEATURE_INDEX = OT_LAYOUT_NO_FEATURE_INDEX;
4459 
4460 /**
4461  * Special value for script index indicating unsupported script.
4462  */
4463 enum OT_LAYOUT_NO_SCRIPT_INDEX = 65535;
4464 alias HB_OT_LAYOUT_NO_SCRIPT_INDEX = OT_LAYOUT_NO_SCRIPT_INDEX;
4465 
4466 /**
4467  * Special value for variations index indicating unsupported variation.
4468  */
4469 enum OT_LAYOUT_NO_VARIATIONS_INDEX = 4294967295;
4470 alias HB_OT_LAYOUT_NO_VARIATIONS_INDEX = OT_LAYOUT_NO_VARIATIONS_INDEX;
4471 
4472 /**
4473  * Maximum number of OpenType tags that can correspond to a give #hb_language_t.
4474  */
4475 enum OT_MAX_TAGS_PER_LANGUAGE = 3;
4476 alias HB_OT_MAX_TAGS_PER_LANGUAGE = OT_MAX_TAGS_PER_LANGUAGE;
4477 
4478 /**
4479  * Maximum number of OpenType tags that can correspond to a give #hb_script_t.
4480  */
4481 enum OT_MAX_TAGS_PER_SCRIPT = 3;
4482 alias HB_OT_MAX_TAGS_PER_SCRIPT = OT_MAX_TAGS_PER_SCRIPT;
4483 
4484 /**
4485  * Do not use.
4486  */
4487 enum OT_VAR_NO_AXIS_INDEX = 4294967295;
4488 alias HB_OT_VAR_NO_AXIS_INDEX = OT_VAR_NO_AXIS_INDEX;
4489 
4490 /**
4491  * Unset #hb_set_t value.
4492  */
4493 enum SET_VALUE_INVALID = 4294967295;
4494 alias HB_SET_VALUE_INVALID = SET_VALUE_INVALID;
4495 
4496 /**
4497  * Maximum valid Unicode code point.
4498  */
4499 enum UNICODE_MAX = 1114111;
4500 alias HB_UNICODE_MAX = UNICODE_MAX;
4501 
4502 /**
4503  * See Unicode 6.1 for details on the maximum decomposition length.
4504  */
4505 enum UNICODE_MAX_DECOMPOSITION_LEN = 19;
4506 alias HB_UNICODE_MAX_DECOMPOSITION_LEN = UNICODE_MAX_DECOMPOSITION_LEN;
4507 
4508 enum VERSION_MAJOR = 4;
4509 alias HB_VERSION_MAJOR = VERSION_MAJOR;
4510 
4511 enum VERSION_MICRO = 0;
4512 alias HB_VERSION_MICRO = VERSION_MICRO;
4513 
4514 enum VERSION_MINOR = 3;
4515 alias HB_VERSION_MINOR = VERSION_MINOR;
4516 
4517 enum VERSION_STRING = "4.3.0";
4518 alias HB_VERSION_STRING = VERSION_STRING;